我似乎无法让 v.push.back() 处理字符串
I can't seem to get v.push.back() to work with strings
// ConsoleApplication25.cpp : main project file.
#include "stdafx.h"
#include <iostream>
#include <string>
#include <iomanip>
#include <ios>
#include <vector>
#include <algorithm>
using namespace System;
using namespace std;
int main()
{
vector<string> words;
string x;
cout << "Enter words followed by end of file: " << endl;
while (cin >> x){
words.push_back(x);
}
cout << endl;
int count=0;
string Uword;
cout << "Enter the word you want me to count" << endl;
cin >> Uword;
for(int i = 0; i < (int)words.size(); ++i){
if (Uword == words[i]){
++count;
}
}
cout << "You word appeared " << count << " times" << endl;
system("pause");
return 0;
}
有人可以告诉我我做错了什么吗? :/显然,我不明白一个关键概念。该程序不断跳过我的第二个cin
。甚至不看 for 循环,我也不知道为什么。
您的第一个 while 循环读取直到文件结束...文件结束后,您的流状态设置了 EOF 位,这就是该循环退出的原因。 这也是为什么下一次尝试cin >> Uword
退出而不做任何事情的原因。 如果你写了类似的东西...
if (!(cin >> UWord))
{
std::cerr << "unable to read uword from cinn";
return 1;
}
。(通常是一个好习惯(你会注意到失败。
解决这个问题的典型方法是有一个"哨兵"词来表示这组词的结尾......例如:
std::cout << "Enter valid words followed by the sentinel <END>:n";
while (std::cin >> x && x != "<END>")
words.push_back(x);
您肯定希望在之后阅读Uword
时使用if
测试,这样您就可以识别并处理在没有看到<END>
的情况下击中了EOF。
或者,让他们先输入Uword
然后让循环读取所有单词,直到 EOF....
值得注意的是,对于某些共生者/环境,cin
可以"体验"多个 EOF......例如,在 Windows CMD.EXE提示符下按 Control-Z 会生成 EOF,但如果调用 cin.clear()
重置 EOF 位,则可以在之后继续读取cin
。 也就是说,如果您编写程序来依赖它,那么就无法使用以下语句自动调用/使用/测试它们:
echo word1 word2 word3 word2 <END> word2 | ./word_counter_app
cat test_case_1 | ./word_couner_app
./word_couner_app < ./test_cast_2
这种调用非常有用,即使您不关心可移植性,也最好避免尝试阅读 post-EOF。
cin
将在第一次循环后设置EOF。因此,在输入其他任何内容之前,您只需要清除它:
cin.clear();
cin >> UWord;
相关文章:
- 警告处理为错误这里有什么问题
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 使用流处理接收到的数据
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 基于多个条件处理地图中的所有元素
- 如何用数字处理log(0)
- SSL上的`curl_easy_send`和`curl_asy_recv`:如何处理`CURLE_AGAIN`
- 错误处理.将系统错误代码映射到泛型
- 从文本文件中读取时钟时间和事件时间并进行处理
- 在运行时处理类型擦除的数据-如何不重新发明轮子
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 用于矢量处理的多个线程
- 对字符串进行排序时,在c++中处理sort()
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- 处理除以零会导致<csignal>意外行为
- 是否可以在c++中处理字符串流中的各个元素
- 我似乎无法让 v.push.back() 处理字符串