我可以输入getline调用的输入(cin,input,' \ n'),但它永远不会结束。我可以继续提供意见。我试过没有for循环,它接受getline()的输入,然后打印它。所以我的猜测是for循环有问题。我没有编译器错误。
#include <iostream>
#include <string>
using namespace std;
int main()
{
unsigned int i = 0;
int cat_appearances = 0;
string l;
cout << "Please enter a line of text: " << endl;
getline(cin, l, '\n');
for (i = l.find("cat", 0); i != string::npos; i = l.find("cat", i)) {
cat_appearances++;
//move past the last discovered instance to
//avoid finding same string again
i++;
}
cout << "The word cat appears " << cat_appearances
<< " in the string " << '"' << l << '"';
}
答案 0 :(得分:4)
打开编译器警告!
warning: comparison is always true due to limited range of data type [-Wtype-limits]
for(i = l.find( "cat", 0); i != string::npos; i = l.find("cat",i ))
^
std::string::npos
的类型是实现定义的,您的编译器可能将其定义为std::size_t
,并在您的平台上sizeof(unsigned int) < sizeof(std::size_t)
。
std::string::npos
定义为std::string::size_type(-1)
,即std::numeric_limits<size_t>::max()
,您的平台上的值无法用unsigned int
表示。
将i
更改为
std::string::size_type i = 0;
(另一方面,你提醒你包括一个完整的,可编辑的例子!)