我是C ++的新手,现在我正在学习名为 Accelerated C ++ 的书。我完成了第三章(向量),我参加了这个练习:
“编写一个程序来计算每个不同单词在其输入中出现的次数。”
经过一番思考,我开始研究它。我想测试程序,但是std :: cout无法正常工作。我将cout << "test";
放在我的代码中的几个位置以查看问题的位置,结论是它在第一个for循环中不起作用。不建议我使用地图来解决问题,因为我正在研究向量。变量不是英文的,所以我会翻译一些让你知道发生了什么:
recenica - 句子; rijec - 一个字; vel_vektora - 向量的大小; duz_recenice - 句子的长度; br_ponavljanja - 单词出现在句子中的次数;
#include <vector>
#include <iostream>
#include <string>
using std::string; using std::vector;
using std::cin; using std::cout;
using std::endl;
int main()
{
string rijec;
vector<string> recenica;
while (cin >> rijec) recenica.push_back(rijec);
cout << endl;
typedef vector<string>::size_type vel_vektora;
vel_vektora duz_recenice = recenica.size();
cout << "test0, ";
for (int i = 0; i < duz_recenice - 1; ++i)
{
cout << "test, !";
int br_ponavljanja = 1;
for (int j = i + 1; j < duz_recenice; ++j)
{
cout << "test2, ";
if (recenica[i] == recenica[j])
{
cout << "test3, ";
++br_ponavljanja;
recenica.erase(recenica.begin() + j);
}
cout << "test4, ";
}
cout << recenica[i] << ": " << br_ponavljanja << endl;
}
cout << "test5, ";
getchar();
return 0;
}
std::cout
有什么问题?
答案 0 :(得分:7)
添加<< flush
以刷新输出缓冲区(每个地方)。
或者使用<< endl
,它们都会添加新行和刷新。
代码存在问题,特别是对于空输入,但这就是你要了解的内容,所以我会告诉你的! : - )
干杯&amp;第h。,
答案 1 :(得分:1)
我担心这个语言在变量名称方面难以理解,但这个“为我而工作”。
这是我的输出(前3行输入:)
ytreyert
tyryteter
gdhdfgdf
^Z
test0, test, !test2, test4, test2, test4, ytreyert: 1
test, !test2, test4, tyryteter: 1
test5,
你绝对应该在打印后尝试冲洗cout缓冲区(根据Alf的回答)。
我注意到gdhdfgdf
没有计算,这是因为这一行:
for (int i = 0; i < duz_recenice - 1; ++i)
如果你只提供1个输入字,那么这个循环将不会运行,就像你在循环之前duz_recenice = recenica.size();
一样。
将此行更改为
for (int i = 0; i < duz_recenice; ++i)
解决了这个问题。