2015-06-09 3 views
-2

Простой вопрос.Оператор сравнения строк C++

cout << "What color do you want to search for?" << endl; 
string key; 
string ARRAY[5]; 
cin >> key; 

for (int i = 0; i < 5; i ++) 
{ 
    if (ARRAY[i] == key) 
     cout << "Found " << key << endl; 
    else 
     cout << key << " not found" << endl; 
} 

У меня есть массив с 5 цветами, но независимо от ввода я прихожу к функции else. Использую ли я правильный оператор сравнения для сравнения строк? Я знаю, что эквивалент java для этого - .equals(). Любая помощь будет оценена!

EDIT: Вот мой весь код, который более четко показывает проблему.

#include <iostream> 
#include <fstream> 
#include <string> 
#include <algorithm> 

using namespace std; 

string ARRAY[5]; 

int main() 
{ 
    ofstream myFile; //creates a file writer object 
    myFile.open("searchfile.txt"); //creates a file named "searchfile.txt" 

myFile << "Orange" <<endl << "Green" <<endl << "Blue" <<endl << "Red" <<endl << "Purple" <<endl; 
myFile.close(); 



string key; 
string LIST; 
ifstream myFile2; //creates a file reader object 
myFile2.open("searchfile.txt"); 

while (!myFile2.eof()) //if not at the end of the file, continue reading 
{ 
    for (int i = 0; i < 5; i++) 
    { 
     getline(myFile2, LIST); //stores the value in string variable 'LIST' 
     ARRAY[i] = LIST; 
     cout << ARRAY[i] <<endl; 
    }//end for 
}//end while 
myFile2.close(); 

cout <<"What do you want to search for?" <<endl; 
cin >> key; 
key = "Red"; 
for (int i = 0; i < 5; i++) 
{ 
    if (ARRAY[i].equal(key)) 

     cout <<"Found " << key <<endl; 

    else 
     cout << key <<" not found" <<endl; 
    //end if 
} 
return 0; 

}

+0

вы объявить ключ в виде строки? – CIsForCookies

+0

Да, я объявил это как строку ранее в коде, я сейчас это изменил. – Shambaree

+0

, если ваш массив является строковым массивом, который должен работать. вы можете показать объявление массива? – CIsForCookies

ответ

0

код семантически правильно для того, что вы хотите сделать. Опасайтесь cin >> key: если то, что вы набираете, содержит пробел, key будет содержать только первое введенное слово.

-2

http://www.cplusplus.com/reference/string/string/compare/

использование строки сравнения для этого

Пример

std::string str1 ("green"); 
std::string str2 ("red"); 
if (str1.compare(str2) != 0) { 
    cout << "is not equal"; 
} 
if (str1.compare("green") == 0) { 
    cout << "is equal"; 
} 
+2

Метод 'string :: compare' эквивалентен оператору' == '. Основная причина использования сравнения - возможность передать конкретную функцию сравнения символов, например, нечувствительную к регистру ... – norisknofun

1

Логика используется в следующем кадре не прав, даже если вы измените сравнить строки.

for (int i = 0; i < 5; i++) 
{ 
    if (ARRAY[i] == key) 
     cout <<"Found " << key <<endl; 
    else 
     cout << key <<" not found" <<endl; 
} 

Скажем, key == "Purple". Вы не увидите матч до последнего элемента. В то же время вы будете печатать строку not found для всех остальных цветов. Изменение логики в:

bool found = false; 
for (int i = 0; i < 5; i++) 
{ 
    if (ARRAY[i] == key) 
    { 
     found = true; 
     break 
    } 
} 

if (found) 
    cout <<"Found " << key <<endl; 
else 
    cout << key <<" not found" <<endl; 

Вы можете сделать код прессовки с помощью std::find (Спасибо @LightnessRacesinOrbit):

if (std::find(std::begin(ARRAY), std::end(ARRAY), key) != std::end(ARRAY)) 
    cout << "Found " << key << endl; 
else 
    cout << key << " not found" << endl; 
+0

'if (std :: find (std :: begin (ARRAY), std :: end (ARRAY), key)! = std :: end (ARRAY)) cout << "Найдено" << ключ << endl; else cout << ключ << "не найден" << endl; ' –

Смежные вопросы