【问题标题】:I'm having trouble reading in lines from a text file?我在从文本文件中逐行读取时遇到问题?
【发布时间】:2018-12-06 10:31:34
【问题描述】:

我想从文本文件中读取一行,将该行存储在一个字符串数组中,以便稍后显示可以找到单词的行号,并将该行分解为单词以标记多少次唯一话出来了。我已经成功地逐字分解了这些行并标记了它们出现的频率,但是我正在努力将这些行存储在一个字符串数组中,以便以后可以使用它。

void get_word(istream& in_stream, string& w,
              list<string> &wordlist, int& lineCount, string *line)
{

  string t;
  getline(in_stream,t);

  for (int j=0; t[j]; j++)
    t[j] = tolower(t[j]);

  line = &t;
  istringstream iss(t);
  string word;
  while(iss >> word) 
  {
    insert_word(word, wordlist);
  }

}

到目前为止,这就是我所拥有的,无论我尝试对尝试将字符串“t”分配给指向它的“line”数组的行做什么,都不会在数组中放入任何内容,我想我只是完全错过了一些东西。 行被初始化为:

string line[0];

【问题讨论】:

  • 你有一个 zero strings 的数组?
  • line = &amp;t; 为什么?你传递一个指针然后忘记它。这个论点有什么意义?也许您想改为return t
  • 可能是*line = t@Matthieu。有些人出于某种原因喜欢“出论”!
  • 1.零大小的数组对任何事情都没有好处。 2. 给参数赋值对函数外没有影响。
  • 另外,t 是一个局部变量,你无法获取指向它的指针并重用它(即使你将 line 作为引用传递)。

标签: c++ string


【解决方案1】:

首先,string line[0] 给你一个没有字符串的数组。这不太可能是你想要的。为什么不简单地string line?那是一根弦。您可以使用&amp;line 将指向该字符串的指针传递给您的函数。

其次,line = &amp;t 将输入指针替换为指向局部变量的指针。一旦函数结束,该信息就会丢失。如果您写*line = t,那么您将“line 指向的字符串”设置为“t 字符串”的值。

理想情况下,您应该避免使用“out 参数”,而只返回您想要的字符串。

【讨论】:

    猜你喜欢
    • 2020-04-14
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 2017-07-21
    • 2012-01-26
    • 1970-01-01
    相关资源
    最近更新 更多