【问题标题】:About array in stringstream in C++关于 C++ 中字符串流中的数组
【发布时间】:2021-04-09 23:07:19
【问题描述】:

我想设计一个程序,输入一个带空格的字符串,输出分割字符串和字母个数,但是我不知道“while (!ss.eof())”中的“word[]”是什么意思{}”。比如我输入“Programming is fun”,结果是

Programming
is
fun
Length:18

当我将 "word[i]" 更改为 word[0] 时,结果是

fun


Lenght:18

单词[1]是


fun

Lenght:18

谁能解释一下?

这是我的代码:

#include<iostream>
#include<sstream>
using namespace std;

void printStringArray(string word[], int size)
{
    for (int i = 0;i < size;i++)
    {
        cout << word[i] << endl;
    }
}

int main()
{
    string word[10];
    string str;
    getline(cin, str);
    stringstream ss(str);
    int i = 0;
    while (!ss.eof())
    {
        ss >> word[i];//P
        i++;
    }
    printStringArray(word, 3);
    cout << "Lenght:" << str.size();

    return 0;
}

【问题讨论】:

  • 这能回答你的问题吗? The Definitive C++ Book Guide and List
  • 您应该使用调试器一步步完成您的代码。进行更改后,行为应该很明显。否则,请在执行程序时使用笔和纸记下变量及其值。

标签: c++ arrays string stringstream


【解决方案1】:

这个循环:

while (!ss.eof())
{
    ss >> word[0];
    i++;
}

将数组中的第一项设置为 3 个不同的值,在每次迭代中,值都会被新的值替换,因此您在数组的第一个位置留下最后一个单词,而其他条目未设置(空)。

当您将 word[0] 更改为 word[1] 时,除了数组的第二个位置之外,会发生同样的事情。

【讨论】:

  • 旁注:您将在这里逃脱它,因为在ss 中找到的最后一个单词将在到达流末尾时终止,但在正常情况下,looping on EOF is a bug。改用while (ss &gt;&gt; word[i]) { i++; } 来读取,测试读取的是否找到数据,然后对读取的内容采取行动。
  • 实际上,我不能确定这种使用是否安全。如果用户输入一行有一个或多个尾随空格,则计数将关闭,并且错误值将进入数组..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-23
  • 1970-01-01
  • 1970-01-01
  • 2013-04-19
  • 1970-01-01
  • 2011-12-29
  • 2011-03-29
相关资源
最近更新 更多