【问题标题】:Using getline on a string在字符串上使用 getline
【发布时间】:2016-07-10 15:55:18
【问题描述】:

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

例如:

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

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

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

【问题讨论】:

  • 你的标题错了。

标签: c++ string delimiter getline counting


【解决方案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) 假定换行符作为分隔符,因此这不是您想要计算单词的内容。同样,带有分隔符的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])]
但您最好的选择可能是同时制作 wch strings,以便它们可以动态调整大小以适应用户输入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 2013-03-21
    • 2013-03-03
    相关资源
    最近更新 更多