2017-02-12 2 views
-2

Sorry, wenn die Terminologie im Titel falsch ist, aber im Grunde möchte ich ein Char-Array mit einem char * -Array, das String-Literale enthält vergleichen. Im Prinzip habe ich ein Array:Vergleichen von char-Array [] mit char * -Array []?

char temp[6]; 
cin.get(); 
cout << "Enter: "; 
cin.getline(temp,6); 

Und:

char *compare[10] = {".- ", "-... ", "-.-. ", "-.. ", ". ", "..-. "}; 

Wie ich über den Vergleich der Zeichenfolge gehen Sie durch den Benutzer in „temp“ mit den „Vergleichen“ Array-Elemente eingegeben. Beispiel wenn der Benutzer folgendes eingibt: "-..." vergleicht er die eingegebene Zeichenfolge mit jedem einzelnen Element von "compare" und prüft, ob es übereinstimmt? Ich habe versucht, Vergleiche zu machen, aber es gibt mir immer einen Fehler, der sagt "ISO C++ verbietet den Vergleich zwischen Zeiger und Integer [-fpermissive] |"

+3

Wenn Sie C verwenden ++ Verwendung ' std :: string'. Was Sie verwenden, ist ein C-Ism und nicht als C++. – tambre

+0

Was genau hast du "probiert"? –

+0

@tambre Der geschriebene Code ist perfekt C++. –

Antwort

1

Sie sollten die Einrichtungen der STL wo immer möglich immer verwenden.

char temp[6]; 
cin.get(); 
cout << "Enter: "; 
cin.getline(temp,6); 

char *compare[10] = {".- ", "-... ", "-.-. ", "-.. ", ". ", "..-. "}; 

zu:

std::string temp; 
std::cout << "Enter: "; 
std::getline(std::cin, temp); 

std::vector<std::string> compare = {".- ", "-... ", "-.-. ", "-.. ", ". ", "..-. "}; 

nun, ob die eingegebene Zeichenkette Übereinstimmungen zu finden: Damit Sie dieses Tohuwabohu ändern

auto iter = std::find(compare.begin(), compare.end(), temp); 
if(iter != compare.end(){ 
    // You have a match! 
} 

Ein vollständiges Beispiel :

#include <algorithm> 
#include <iostream> 
#include <vector> 

int main(){ 

    std::string temp; 
    std::cout << "Enter: "; 
    std::getline(std::cin, temp); 

    std::vector<std::string> compare = {".- ", "-... ", "-.-. ", "-.. ", ". ", "..-. "}; 

    auto iter = std::find(compare.begin(), compare.end(), temp); 
    if(iter != compare.end(){ 
     //To obtain index from an iterator 
     auto index = std::distance(iter, compare.end()); 

     std::cout << "We found a match at: " << index << '\n'; 
    } 

} 

Wenn Sie viele Fragen über den Code oben haben, möchten Sie wahrscheinlich The Definitive C++ Book Guide and List

+0

'const auto iter'? –

0

Sie sollten STL-Funktion so viel wie möglich überprüfen, verwenden. Versuchen Sie in Ihrem aktuellen Szenario std::string statt char* und std::vector statt char* arr zu verwenden.

Sie können Ihre vorhandenen Code

char temp[6]; 
cin.get(); 
cout << "Enter: "; 
cin.getline(temp,6); 

char *compare[10] = {".- ", "-... ", "-.-. ", "-.. ", ". ", "..-. "}; 

Durch diese

std::string temp; 
std::cout << "Enter: "; 
std::getline(std::cin, temp); 

std::vector<std::string> compare = {".- ", "-... ", "-.-. ", "-.. ", ". ", "..-. "}; 

ersetzen Jetzt können Sie diesen Vektor vergleichen Iterator über wie

for(const auto& iter : compare) { 
    // Do the comparison to check whether it's a match or not. 
} 
+0

Der Name Ihrer Schleifenvariable in der for-Schleife ist * sehr * irreführend. Es ist * kein * Iterator, es ist ein Element des Arrays. –