Entfernen der Satzzeichen aus string Zeichen
Es ist eine übung in dem Buch C++ Primer (Nummer 3.2.3), die fragt:
Schreiben Sie ein Programm, das liest einen string von Zeichen, einschließlich Satzzeichen und schreibt, was gelesen wurde, aber mit den Satzzeichen entfernt.
Habe ich versucht, es zu lösen, aber bekam eine Fehlermeldung:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
cin >> "Enter a sentence :" >> s >> endl;
for (auto c : s)
if (ispunct(c))
remove punct;
cout << s << endl;
}
- ... und was genau ist der Fehler???
- Sollten Sie Klammern verwenden um Ihre
if
undfor
Anweisungen, um Mehrdeutigkeiten zu vermeiden. Auchremove punct
keinen Sinn macht. - Wie man sehen konnte, ist die Frage nicht erforderlich, dass Sie das Ergebnis speichern. Sie durchqueren jedes Zeichen, eins nach dem anderen, warum nicht einfach schreiben, das jeder Charakter eine nach der anderen, wenn es nicht ein Satzzeichen?
- error: cannot bind 'std::istream {aka std::basic_istream<char>}' lvalue to 'std::basic_istream<char>&&'|
- können Sie bitte geben Sie die Lösung ?
- Gehen Sie nicht etwas zu lernen, wenn jemand nur die Hände, die Sie der Lösung. Sie werden wahrscheinlich wollen, um die Verwendung
std::getline
statt von streaming-Daten überoperator>>
. - Ich bin Programmierung in C++11 , also ich glaube nicht, dass es notwendig ist, zu verwenden std::getline
- "Ich glaube nicht" - die berühmten letzten Worte.
- Wenn jemand Sie gebeten, zu schreiben, ein Wort-Prozessor...würden Sie denken, einen traditionellen compiler in der Lage sein zu verstehen, ein Programm wie while (Benutzer-input) { Prozess den Worten; }? Vielleicht die gleichen von Google und Siri haben Sie den Eindruck gegeben, dass Sie können schreiben Sie einfach entfernen punct; oder entfernen punct, wenn (es ist entweder ein Punkt oder ein Komma);. Aber setzen Sie Klammern, nach einem
if
nicht wie von Zauberhand Ihnen erlauben, zu schreiben, was Sie wollen, wie eine Bedingung, noch setzen Sie ein Semikolon am Ende einer Zeile der text make it "- code". Die Sprache hat Regeln. Das Buch ist für das lernen von Ihnen!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werfen Sie einen Blick auf
remove_if()
ispunct
zu::ispunct
?Ihre erste Ausgabe ist, dass Sie
cin
der falsche Weg.cin
ist für standard - Eingang so macht es keinen Sinn, zu versuchen und drucken Sie einen string und einen Zeilenumbruch. Das ist ein job fürcout
:Das andere problem ist, dass
remove punct
als Aussage bedeutet nicht, dass nichts an den compiler. Es ist ein syntax Fehler. Seit Sie drucken möchten, die Zeichenfolge ohne Satzzeichen, einfach nur drucken, wennispunct()
false zurückgegeben:Denken Sie auch daran, verwenden Sie Klammern, um Mehrdeutigkeiten zu vermeiden.