将 C++ 中的文件读取到字符串数组中,不断重复最后一个单词

reading a file in c++ to an array of strings keeps repeating the last word

当我从我的程序中读取一个包含 5 个单词的 .txt 文件并将其放入一个有 20 个空格的数组时,我文件中的最后一个单词填满了我数组中的最后 16 个位置。任何想法为什么?我输入的文件最多20个字。

newArray string[20];
if (inputFile) {
    while (i<20) {
        inputFile >> word;
        if (word.length()<2) {   //gets rid of single character words
            i++;
        }   
        else{
            newArray[i] = word;
            cout<<newArray[i]<< " ";
        }

    }
    inputFile.close();
}

您的问题不清楚,但我确信在您的循环中您可能仍在添加最后一个词,因为您使用 while 循环的方式。添加完单词后,您并没有跳出循环。如果你在文件末尾,你应该跳出循环,这应该可以解决你最后一个单词出现多次的问题。

更好的方法是将整个文件读入 1 个字符串,然后标记化并一次将每个单词添加到数组中。

如果这没有帮助,请提供完整的代码。我也不明白为什么你 i++ } 两次。这是错字吗?

希望对您有所帮助。

编辑:试试这个代码:

int i = 0;
string line;
ifstream myfile("names.txt");
if (myfile.is_open())
{
    while ( getline (myfile,line) )
    {
        arr[i] = line;
        i++;
    }
    myfile.close();
}

您不会在

之后添加任何行

如果我错了请纠正我,但是为什么你需要一个包含 20 个字符串的数组来读入 5 个单词?下面的代码是从文件读取到数组的标准方法。

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main()
{
  string myArray[20];
  ifstream file("file.txt");
  string word;
  if(file.is_open())
    {
      int i = 0;
      while(file>>word)
        {
          if(word.length()<2)
            continue;
          else
            {
              myArray[i] = word;
              i++;
            }
        }
    }
}

附录:编辑将读取所有单词并在没有更多文本时停止。您最初的问题是文件流在读取所有 5 个单词后没有读取任何内容,因此 word 保持不变,导致它填满数组。