So schreibe ich Code, der eine Datei vom Benutzer einnimmt, entfernt alle Satzzeichen. Machen Sie die Datei in Kleinbuchstaben und finden Sie alle eindeutigen Wörter. Das Problem funktioniert nicht richtig und ich weiß nicht warum. Ich drucke nicht die korrekte Anzahl eindeutiger Werte ausWie durchlaufen Zeichen im Stream C++
// convert charater to lowercase
void convert(char& ch){
ch = tolower(ch);
}
int main(){
typedef map<string,int> siMap;
typedef pair<siMap::iterator, bool>ibPair;
typedef siMap::value_type kvpair;
siMap myMap;
string fileName1;
string fileName2;
string value;
char ch;
// get user input
cout << "Please enter the first file Name: "; //asking for a file name
cin >> fileName1;
ifstream infile1;
infile1.open(fileName1.c_str());
//remove all punctuations
while (infile1.get(ch))
{
if (isalpha(ch) || isspace(ch)){
convert(ch);
}
else{
infile1.ignore(ch);
}
infile1 >> value;
myMap[value]++;
}
/*
for (int i = 0; i < 10; i++) {
cout << infile1[i];
} */
cout << " Map size is :" << myMap.size() << endl;
cout << "Please enter the second file Name: "; //asking for a file name
cin >> fileName2;
ifstream infile;
infile.open(fileName2.c_str());
}
Es klingt wie Sie müssen lernen, wie Sie einen Debugger verwenden, um durch Ihren Code zu gehen. Mit einem guten Debugger können Sie Ihr Programm Zeile für Zeile ausführen und sehen, wo es von dem, was Sie erwarten, abweicht. Dies ist ein essentielles Werkzeug, wenn Sie programmieren wollen. Weiterführende Literatur: ** [Wie kleine Programme zu debuggen] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) ** – NathanOliver
Es wäre einfacher, wenn Sie das ganze lesen Zeile in eine Zeichenfolge und verwenden Sie dann 'std :: istringstream', um jedes eindeutige Wort zu verarbeiten. – PaulMcKenzie
In [diesem Beispiel] (http://ideone.com/NivQ0b) erfahren Sie, wie Sie mit dem Speichern eindeutiger Wörter in einer Karte fortfahren können. Beachten Sie, dass die Verwendung von "istringstream" als Parser verwendet werden kann - führen Sie eine Suche auf SO und anderen Sites durch, und Sie sehen, dass dies die am häufigsten verwendete Methode ist. Sie müssen immer noch den Code schreiben, um die eingelesenen Zeichen zu ändern und sie in Kleinbuchstaben zu setzen, bevor sie in einer Karte gespeichert werden. – PaulMcKenzie