C++中的字符与字符串中的字符的比较

z2acfund  于 2023-05-02  发布在  其他
关注(0)|答案(1)|浏览(139)

我尝试比较两个字符(我的搜索字符和输入字符串中的字符),以查看给定字符串中存在多少个搜索字符。但是,无论我输入什么,我得到的计数都是0。
下面是我的代码供参考:

#include <iostream>
#include <string> 
using namespace std;

int main() {
    string str;
    int length = 0;
    char ch;
    char search;
    int count = 0;

    length = str.length();

    cin >> search;
    cin >> str;

    for (int i = 0; i < length; i++) {

        //current character
        ch = str[i];
        //cout << ch << " ";
        if (ch == search) {
            count += 1;
        }
    }
    cout << count << " " << search << "'s" << endl;

    return 0;
}

我已经尝试了ch.compare(search)(ch == search),正如我的代码中所示。这两个结果都是count得到0。我还翻转了chsearch,并尝试将searchch都设置为' ',但仍然没有任何效果。下面是我尝试过的一个测试的例子。
字符串"Geek"中有多少个e
我不知道我做错了什么,因为count的输出是0。
例如:
输入:"Geek"
所需产量:2 e's
我得到的是:0 e's
我使用CLion作为我的IDE,我的语言标准设置为C++23。

rjjhvcjd

rjjhvcjd1#

您正在检索str.length()的值之前您已将用户的输入读入str。此时str仍然是空的,因此length变量始终为0,因此循环永远不会运行。
您需要在将输入读入str后**读取str.length()值:

#include <iostream>
#include <string> 
using namespace std;

int main() {
    string str;
    int length = 0;
    char ch;
    char search;
    int count = 0;

    // length = str.length(); // <-- too early here!

    cin >> search;
    cin >> str;

    length = str.length(); // <-- move it here instead!

    for (int i = 0; i < length; i++) {

        //current character
        ch = str[i];
        //cout << ch << " ";
        if (ch == search) {
            count += 1;
        }
    }
    cout << count << " " << search << "'s" << endl;

    return 0;
}

Online Demo
话虽如此,您可以通过使用迭代器而不是索引来消除阅读length的需要:

#include <iostream>
#include <string> 
using namespace std;

int main() {
    string str;
    char ch;
    char search;
    int count = 0;

    cin >> search;
    cin >> str;

    for (auto iter = str.begin(); iter != str.end(); ++iter) {

        //current character
        ch = *iter;
        //cout << ch << " ";
        if (ch == search) {
            count += 1;
        }
    }
    cout << count << " " << search << "'s" << endl;

    return 0;
}

Online Demo
或者,使用range-for loop(内部使用迭代器):

#include <iostream>
#include <string> 
using namespace std;

int main() {
    string str;
    char search;
    int count = 0;

    cin >> search;
    cin >> str;

    for (char ch : str) {
        //cout << ch << " ";
        if (ch == search) {
            count += 1;
        }
    }
    cout << count << " " << search << "'s" << endl;

    return 0;
}

Online Demo
或者,使用标准的std::count()算法而不是手动循环:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main() {
    string str;
    char search;
    int found;

    cin >> search;
    cin >> str;

    found = count(str.begin(), str.end(), search);

    cout << found << " " << search << "'s" << endl;

    return 0;
}

Online Demo

相关问题