在 C++ 中将字符与字符串内部的字符进行比较

问题描述 投票:0回答:2

我正在尝试比较两个字符(我的搜索字符和输入字符串中的字符)以查看给定字符串中存在多少我的搜索字符。但是,无论我输入什么,我得到的计数都是 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。我还翻转了
ch
search
,并尝试将
search
ch
都设置为
' '
,但同样没有任何作用。下面是我尝试过的其中一项测试的示例。

字符串中有多少个

e
"Geek"
.

我不知道我做错了什么,因为

count
的输出为 0。

例如:

输入:

"Geek"

想要的输出:
2 e's

我得到的是:
0 e's

我在我的 IDE 中使用 CLion,我的语言标准设置为 C++23。

c++ compare character
2个回答
0
投票

你看,你的代码首先可以简化。您使用大量不必要的内存来尝试比较事物。我添加了评论让你知道你可以缩短什么。

其次,这是你的问题。在输入之前设置字符串的长度。这意味着你在你的

cin
之前得到一个空字符串的长度,这意味着
length
是0而不是输入的长度。这意味着您的循环在 0 处结束并且不会运行。把你的
cin
行放在那之前,你的问题就会解决。

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

int main() {
    string str = ""; //no need for extra int for length
    char search = '\0';
    int searchCnt = 0;
    cin >> search >> str; //you can cin at the same time
    for (int i = 0; i < str.length(); i++) { //str.length() wont be 0
        if (search == str[i]) { // no need for new char ch
            searchCnt++; //same as searchCnt += 1
        }
    }
    cout << searchCnt << " " << search << "'s" << '\n';
    return 0;
}

-1
投票

你正在检索

str.length()
before 你用
cin >> str
读取用户的输入,当
str
仍然是空的,因此你的
length
变量总是 0 并且你的循环永远不会运行。

读取输入后需要读取长度

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

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

    cin >> search;
    cin >> str;

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

    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;
}

也就是说,考虑使用标准的

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.