2016-08-09 5 views
0

поэтому у меня есть этот набор строк, которые хранятся в массиве. Я хочу найти массив, поэтому, когда строка найдена, она должна сказать found, и когда ее не найти, она должна сказать invalid это то, что я до сих порпоиск по массиву строки

cout << "Enter a Name to Search" <<endl; 
cin >>userInput; 

for (int i=0; i<size; i++) 
{ 
    if (first_name[i]==userInput) 
    { 
     cout <<"Found"<<endl; 
    }else{ 
      cout << "InValid"<<endl; 
      break; 
     } 
} 

так каждый раз, когда я запускаю это я всегда перенаправлены на другое заявление есть в любом случае для меня, чтобы исправить это

+0

Пожалуйста, измените вопрос, чтобы обеспечить [mcve] – Slava

+0

Вы можете пройти этот код на бумаге (или в голове) и посмотреть, что произойдет, если 'userInput' является вторым элементом в' first_name' массива. – 1201ProgramAlarm

+1

Предоставьте минимальный код, чтобы воспроизвести вашу проблему. Как объявляется 'размер'? – Inline

ответ

0

Я думаю, что более элегантное решение будет использовать логический флаг, как:

cout << "Enter a Name to Search" <<endl; 
cin >>userInput; 
bool found = false; 

for (int i=0; i<size; i++) 
{ 
    if (first_name[i]==userInput) 
    { 
    found = true; 
    break; 
    } 
} 

cout << (found?"found":"invalid") << endl; 
+0

Я думаю, вы правы, но можете ли вы объяснить, что это за знак вопроса, здесь 'cout << (найдено?" Found ":" invalid ") << endl;' – f2355116

+1

thats тернарный оператор C/C++ (см. Http://www.cprogramming.com/reference/operators/ternary-operator.html), который я использовал для исключения инструкции 'if'. – Jaime

+0

В порядке я получаю его своего рода ярлык способ записи выражения 'if then else' – f2355116

-1

так я смог найти решение это то, что я

string result =""; //set a string named result 
    cout << "Enter a Name to Search" <<endl; 
    cin >>userInput; 

    for (int i=0; i<size; i++) 
    { 
     if (!(first_name[i]==userInput)) 
     { 
      result = "Found"; 
      break; 
     }else{ 
       result ="InValid"; 

      } 
    } 
    cout <<result<<endl; //outside of for loop 
+0

выглядит так, будто ваш перерыв находится в неправильном блоке. Он должен ломаться всякий раз, когда вы найдете строку – Jaime

+0

okay я исправил ее – f2355116

2

Используйте контейнеры наподобие std::set и std::unordered_set для быстрого поиска.

#include <iostream> 
#include <unordered_set> 
#include <string> 

int main() 
{ 
    std::unordered_set<std::string> first_name; 
    first_name.insert("Joe"); 
    first_name.insert("Anderson"); 
    //.... 

    std::string input; 
    std::cin >> input; 
    std::unordered_set<std::string>::iterator searchResult = first_name.find(input); // Search for the string. If nothing is found end iterator will be returned 
    if(searchResult != first_name.end()) 
     std::cout << "Found!" << std::endl; 
    else 
     std::cout << "Not found!" << std::endl; 
} 

выход Programm, когда "Джо" был набран:

Found! 
Press <RETURN> to close this window... 

Для примера все это Окей, если userInput является std::string, first_name является массивом std::string и переменной size магазина размер массива.

+0

это выглядит для меня сложным комплексом – f2355116

+0

@ f2355116 Я могу добавить исправление для массивов, если вы отредактируете свой вопрос и добавите минимальный код для воспроизведения проблемы. Как объявляется 'размер'? – Inline

1

Вы нарушаете из еще части. Так, например, если массив имеет размер 10, и если вы укажете userinput как строку, присутствующую в пятом элементе массива, ваш код будет разбит на первую итерацию цикла for. Попробуйте приведенный ниже код. Если совпадение найдено, оно будет напечатано «найденным», или если пользовательский номер не существует в массиве, он будет печататься недействительным. Надеюсь, поможет. Инициализируйте «first_name» с помощью элемента массива и измените размер.

string userInput; 
string first_name[10]; 
int i=0; 
int size = 10; 

first_name[0] = "Hi"; 
first_name[1] = "Hii"; 
first_name[2] = "Hiii"; 
cout << "Enter a Name to Search" <<endl; 
cin >> userInput; 

for (i = 0; i<size; i++) 
{ 
    if (first_name[i] == userInput) 
    { 
     cout <<"Found"<< endl; 
     break; 
    } 
} 
if(i == size) 
    cout << "Invalid" << endl; 
Смежные вопросы