0

我被告知要向用户询问一个字符串(一个句子)。然后要求用户输入另一个字符串以在字符串 1(句子)中进行搜索。程序必须计算第二个字符串出现在第一个字符串中的次数。我没有收到任何错误,但它没有计算字母。这是我得到的结果:

输入一句话:我爱喝汤

输入要搜索的字符串:ou

您提供的第一个字符串中有 0 个字符串 ou。

有人可以告诉我我做错了什么吗?我是 C++ 的初学者,所以我在理解上有些困难。

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

int  main() {

        string sentence;
        string search;
        int count = 0;

        cout<<"Enter a sentence:";
        getline (cin, sentence);
        cout<<"Enter string to search:";
        getline (cin, search);

        cout << "There are " << count << " of the string " << search << " in the first string you provided." <<"\n";

        for (int i=0; i < sentence.size(); ++i)
        {
                if (sentence == search)

                count++;
        }

        return count;


}
4

5 回答 5

2

两个问题:

  1. count在计算之前先打印。
  2. 您实际上并不是在搜索子字符串。您应该查看文档std::string以找到搜索子字符串的适当方法。但是,您走在正确的轨道上。
于 2013-01-31T00:48:06.400 回答
0

好吧,您正在尝试在计算结果之前输出结果。

此外,==用于精确匹配,而不是子字符串搜索。

于 2013-01-31T00:46:42.367 回答
0

您在搜索字符串并设置计数的循环之后有您的 cout 打印行。将其移至该循环下方。

于 2013-01-31T00:46:51.907 回答
0

看起来您应该将 cout 语句放在此方法的末尾。因为在您的代码中,当您输出时 count 始终为 0

于 2013-01-31T00:47:31.700 回答
0

您应该修改循环,以便它真正搜索子字符串并计算它们的出现次数:

string::size_type pos = sentence.find(search);
while (pos != string::npos)
{
    pos = sentence.find(search, pos + search.size());
    count++;
}

此外,您很可能希望将这条线移到实际计算 值的点之后count

cout << "There are " << count << ...

否则,它显然会输出count最初初始化的值(即0)。

于 2013-01-31T00:54:01.203 回答