我正在尝试解决这个问题:
编写一个程序来计算每个不同单词在其输入中出现的次数。
这是到目前为止的代码:
#include <algorithm>
#include <iomanip>
#include <ios>
#include <iostream>
#include <string>
#include <vector>
#include <iterator>
using std::cin;
using std::sort;
using std::cout;
using std::streamsize;
using std::endl;
using std::string;
using std::setprecision;
using std::vector;
int main()
{
cout << "Enter words: ";
vector<string> lista;
vector<string> listaCitita;
string x;
while(cin >> x)
{
lista.push_back(x);
}
int listaSize = lista.size();
for(int i = 0; i <= listaSize -1; i++)
{
int x = 0;
int counter = 0;
vector<string>::iterator it = find(listaCitita.begin(), listaCitita.end(), lista[i]);
vector<string>::iterator itu = find(lista.begin(), lista.end(), lista[i]);
if(it != listaCitita.end())
{
break;
}
while(x <= listaSize -1)
{
if(lista[i] == lista[x])
{
counter++;
x++;
if(itu != lista.end())
{
}
else
{
listaCitita.push_back(lista[i]);
}
}
else
{
x++;
}
}
cout << "The string: '" << lista[i] << "' appeared " << counter << " times" << endl;
}
return 0;
}
我想要做的是,如果它已经被打印了多少次,那么它就不会再被打印多少次了。 这就是我制作第二个向量(listaCitita)的原因,我在其中添加了已经迭代过的元素。问题在于,当我这样做时,它并没有突破for循环。
if(it != listaCitita.end())
{
break;
}
抱歉我的英语不好。谢谢。
答案 0 :(得分:2)
break语句结束最近的封闭循环或条件语句的执行。控制权传递给语句末尾之后的语句(如果有的话)。
当您到达break
时,您会跳到for
循环(return 0
)的末尾。您要在此处使用的是continue
关键字,该关键字将跳过当前字词并继续使用下一个字词。
答案 1 :(得分:0)
如果您的计划达到了突破,它肯定会突破它。
另一种突破循环的方法,特别是如果它是一个嵌套循环并且你想要突破外部循环的话就会转到。
...
while(...) { while(...) { if(...) { goto end; }}}
end: //will jump here
...
答案 2 :(得分:0)
您可以使用goto
,throw
或return
打破嵌套循环(当然,您需要将循环分离为函数或lambda以使后一种方法起作用)
在任何情况下,您的特定任务都不会要求突破嵌套循环或任何其他循环。您需要检查单词是否已在外循环中打印。如果是,继续,否则继续计数,打印,并将其推送到已经打印过的单词的矢量。
使用适合该任务的容器和/或算法将消除完全使用嵌套循环的需要。考虑std::unordered_map
。另请阅读std::count
。