使用 cin.getline() 和 cin.get()

Posted

技术标签:

【中文标题】使用 cin.getline() 和 cin.get()【英文标题】:Using cin.getline() and cin.get() 【发布时间】:2013-09-26 04:15:39 【问题描述】:

我在理解如何使用 cin.getline 和 cin.get 时遇到了一些麻烦。我相信我理解这个问题,只是想弄清楚如何结合使用它们来解决问题。

我正在读取通过命令行通过 cin 读取的文本文件。

我创建了一个名为 spaceStation 的向量向量,我想用字符加载它。例如,这是文件的一小部分

M
4
2
//Possible comments
....
#...
E#..
#...

为此,我仅使用 cin>> 正确读取前三个字符以加载到变量中。现在我需要创建一个循环来在同一行中读取这些多个字符。 1) 我应该忽略所有 cmets 2) 我想运行 while 循环,直到到达不包含更多信息的新行

我创建了一个字符串 s,所以 getline(cin,s) 应该加载整行。我的问题是我应该创建一个 cstring s 以便我可以访问要加载的单个字符,还是有办法使用 cin.get() 来提取 s 接收到的行的单个字符。

【问题讨论】:

std::getline 读入std::string,从std::string 可以一个一个地访问每个字符。参见例如this reference. "cppreference" 和 "cplusplus" 网站都提供了非常方便的参考,例如cplusplus.com/reference/string 和 cplusplus.com/reference/fstream/ifstream 我的回答对您有帮助吗? 【参考方案1】:
string s;
vector<string> v; // this is the best choice you can iterate like this to get char by char:

for (int i=0;i<v.size();i++)
    for (int j=0;j<v[i].size();j++)
        v[i][j];

// or like this to get strings
for (int i=0;i<v.size();i++)
    v[i];

getline(cin, s); // this is to read the \n (new line) after int in the 3rd line
while (getline(cin,s))// till end of file

    if (s.find_first_not_of(".#E") == -1)
    
        v.push_back(s);
    


for (int i=0;i<v.size();i++)
        cout<<v[i]<<endl;

您还可以利用字符串类函数。

【讨论】:

以上是关于使用 cin.getline() 和 cin.get()的主要内容,如果未能解决你的问题,请参考以下文章

std::cin.getline() 与 std::cin

无法使用 cin.getline 读取字符数组

cin.get(), cin.getline() , getline(cin,s) 三者的区别

cin,cin.get(),cin.getline(),getline()

cin, getline() 与 get() 的区别

使用 cin.getline(.) 将 char 数组转换为字符串