如何处理空间输入比较字逆C ++

时间:2017-03-30 17:13:53

标签: c++ string

我们正在接收用户输入并在后台反转它并询问用户反向是什么。然后我们比较realreverse和userreverse并说它是正确的或者犯了多少错误。我们还使用点数来计算句子,用户应该用@结束他的输入。

例如:

hi. how are you doing. @

hi bro how are u. 
im good. @

问题是我的程序仅在输入不包含任何空格时才起作用。

hihowareyoudoing. thanksimfinebro @     

如果输入是这样的,它就可以正常工作。 它的工作原理

hihowareyoudoing.
thanksimfinebro. @

这两栏也在运作

代码: (程序显示正确的测试反转)

#include <iostream>
#include <string>
using namespace std;
void Comparison(string reverseReal, string reverseUser) {
    int wrongCount = 0;
    if (reverseReal.length() != reverseUser.length()) {
        cout << "These strings are not comparable." << endl;
    }
    else {
        for (int i = 0; i < reverseReal.length(); i++) {
            if (reverseReal.substr(i, 1) != reverseUser.substr(i, 1)) {
                wrongCount++;
            }
        }
        cout << "Number of mistakes: " << wrongCount << endl;
        if (wrongCount == 0){
            cout << "gj correct reverse" << endl;
        }
    }
}
string getReverse(string sentence) {

    string reverseResult = "";
    for (int i = sentence.length() - 1; i >= 0; i--) {
        reverseResult += sentence.substr(i, 1);
    }
    return reverseResult;
}
int findsnumber(string snumber)
{
    unsigned int sentences = 0, index = 0, length;
    string searchPattern = ".";
    length = snumber.length();
    while (index < length)
    {
        index = snumber.find(searchPattern, index);
        if (index != string::npos)
        {
            index += searchPattern.length();
            sentences++;
        }
    }
    return sentences;
}

// Gets the string until it finds a dot in it
string getOneSentence(string sentence) {
    while (sentence.find(".") != string::npos) {
        int dotFinder = 0;
        string sub = "";
        dotFinder = sentence.find(".");
        sub = sentence.substr(0, dotFinder);
        return sub;
    }
    return "";
}

int main() {

    string input = "";
    string result = "";
    string reverseReal = "";
    int i = 1;
    cout << "Welcome to my cancer c++ programme." << endl;
    cout << "Enter the paragraph with @ at the end to end it:" << endl;
    while (cin >> input && input != "@") {
        result += input + " ";
    }
    int sentnumber = findsnumber(result);
    cout << "Number of sentences in the given string " << sentnumber << endl;
    while (result.find(".") != string::npos) {
        string sub = "";
        string subReverse = "";
        string reverse = "";
        string reverseson = "";
        cout << i << "/" << sentnumber << endl;
        sub = getOneSentence(result);
        subReverse = getReverse(sub);
        cout << "reverse of the sub " << subReverse << endl;
        cout << "Sentence " << i << " : " << sub << endl;
        cout << "Enter the reverse of your sentence" << endl;
        while (cin >> reverse && reverse != "@"){
            reverseson += reverse + "";
        }
        Comparison(subReverse, reverseson);
        result = result.substr(result.find(".") + 2, result.length());
        i++;
    }
    cin.ignore();
    cin.get();
}

2 个答案:

答案 0 :(得分:0)

cin不支持带空格的输入字符串。
因此,输入包含空格的字符串需要使用getline()

正确语法 std::getline(std::cin, input);

答案 1 :(得分:0)

编辑你的代码!

#include <iostream>
#include <string>
using namespace std;
void Comparison(string reverseReal, string reverseUser) {
    int wrongCount = 0;
    if (reverseReal.length() != reverseUser.length()) {
        cout << "These strings are not comparable." << endl;
    }
    else {
        for (int i = 0; i < reverseReal.length(); i++) {
            if (reverseReal.substr(i, 1) != reverseUser.substr(i, 1)) {
                wrongCount++;
            }
        }
        cout << "Number of mistakes: " << wrongCount << endl;
        if (wrongCount == 0){
            cout << "gj correct reverse" << endl;
        }
    }
}

string getReverse(string sentence) {

    string reverseResult = "";
    for (int i = sentence.length() - 1; i >= 0; i--) {
        reverseResult += sentence.substr(i, 1);
    }
    return reverseResult;
}

int findsnumber(string snumber)
{
    unsigned int sentences = 0, index = 0, length;
    string searchPattern = ".";
    length = snumber.length();
    while (index < length)
    {
        index = snumber.find(searchPattern, index);
        if (index != string::npos)
        {
            index += searchPattern.length();
            sentences++;
        }
    }
    return sentences;
}
// Gets the string until it finds a dot in it
string getOneSentence(string sentence) {

    while (sentence.find(".") != string::npos) {
        int dotFinder = 0;
        string sub = "";
        dotFinder = sentence.find(".");
        sub = sentence.substr(0, dotFinder);
        return sub;
    }
    return "";
}

int main() {

    //char input = '\0';
    string input = "";
    string result = "";
    string reverseReal = "";
    int i = 1;
    cout << "Welcome to my cancer c++ programme." << endl;
    cout << "Enter the paragraph with @ at the end to end it:" << endl;
    getline(cin, input,'@');
    result = input;
    int sentnumber = findsnumber(result);
    cin.clear();
    cout << "Number of sentences in the given string " << sentnumber << endl;

    while (result.find(".") != string::npos) {
        string sub = "";
        string subReverse = "";
        string reverse = "";
            string reverseson = "";
        cout << i << "/" << sentnumber << endl;
        sub = getOneSentence(result);
        subReverse = getReverse(sub);
        cout << "reverse of the sub " << subReverse << endl;
        cout << "Sentence " << i << " : " << sub << endl;
        cout << "Enter the reverse of your sentence" << endl;
        cin.clear();
        cin.ignore();
        getline(cin,reverse,'@');
        reverse.erase(reverse.end() - 1, reverse.end());
        reverseson = reverse;
        Comparison(subReverse, reverseson);
        result = result.substr(result.find(".") + 2, result.length());
        i++;
    }
    system("pause");
}