如何使用getline()
读取我存储在字符串中的单词?
例如:
char ch[100],w[20];
cin.getline(ch,100);
现在我可以使用getline
来计算ch
中的字数吗?我不想使用分隔符来直接计算来自ch
的单词。我想阅读ch
中的字词并将其存储在w
中。
我尝试在ch
中使用getline
作为参数。
答案 0 :(得分:1)
getline
在标准中实施为a stream method或采用流的string
方法:http://en.cppreference.com/w/cpp/string/basic_string/getline
getline
没有标准实现,不需要流。
也就是说,您可以使用ch
为istringstream
种子来计算字符串中的字数,但是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;
}
就像在这里注意的那样,定义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
但是,您最好的选择可能是同时生成ch
和string
array[1][2][3] = [1,2]
,以便他们可以动态调整大小以适应用户输入。