在字符串上使用getline

时间:2016-03-23 11:22:19

标签: c++ string delimiter getline counting

如何使用getline()读取我存储在字符串中的单词?

例如:

char ch[100],w[20];
cin.getline(ch,100);

现在我可以使用getline来计算ch中的字数吗?我不想使用分隔符来直接计算来自ch的单词。我想阅读ch中的字词并将其存储在w中。

我尝试在ch中使用getline作为参数。

1 个答案:

答案 0 :(得分:1)

getline在标准中实施为a stream method或采用流的string方法:http://en.cppreference.com/w/cpp/string/basic_string/getline

getline没有标准实现,不需要流。

也就是说,您可以使用chistringstream种子来计算字符串中的字数,但是basic_istream<CharT, Traits>& getline(basic_istream<CharT, Traits>&& input, basic_string<CharT, Traits, Allocator>& str)会将换行符作为分隔符,这样就不会是您的&# #39;想要算数字。同样,带有分隔符的getline只会在特定字符上中断。相反,你可以使用basic_istream& basic_istream::operator>>来分割所有空格字符上的单词:

istringstream foo(ch);

for(auto i = 1; foo >> w; ++i) {
    cout << i << ": " << w << endl;
}

Live Example

就像在这里注意的那样,定义char w[20]只是在寻求一个越界的写法。至少您需要定义,如果ch填充了非空格字符,w可以包含所有字符。你可以通过定义char w[100]来做到这一点 但如果有人在不改变ch的大小的情况下增加w的尺寸,那么您又会遇到麻烦。在C ++ 17中,您可以在w之前定义char w[size(ch)] char w[sizeof(ch) / sizeof(ch[0])]之前w 但是,您最好的选择可能是同时生成chstring array[1][2][3] = [1,2] ,以便他们可以动态调整大小以适应用户输入。