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

时间:2016-01-17 03:55:24

标签: c++ arrays arrayofstring

当我从我的程序中读入一个包含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();
}

2 个答案:

答案 0 :(得分:1)

您的问题尚不清楚,但我确信在您的循环中您可能仍在添加最后一个单词,因为您使用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();
}

您不会在

之后添加任何行

答案 1 :(得分:1)

如果我错了,请纠正我,但为什么你需要一个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保持不变,导致它填满数组。