从文本文件读取到数组

时间:2017-10-06 06:50:08

标签: c++ arrays sorting fstream

我只是C ++的初学者

我想将文本文件(最多1024个单词)读入数组,我需要忽略所有单个字符。你们可以帮我丢弃单个字符的单词以避免使用符号,特殊字符。

这是我的代码:

#include <fstream>
#include <string>
#include <iostream>
using namespace std;

const int SIZE = 1024;

void showArray(string names[], int SIZE){
    cout << "Unsorted words: " << endl;
    for (int i = 0; i < SIZE; i++){
        cout << names[i] << " ";
        cout << endl;
    }
    cout << endl;
}
int main()
{
    int count = 0;
    string names[SIZE];

    // Ask the user to input the file name
    cout << "Please enter the file name: ";
    string fileName;
    getline(cin, fileName);
    ifstream inputFile;
    inputFile.open(fileName);

    // If the file name cannot open 
    if (!inputFile){
        cout << "ERROR opening file!" << endl;
        exit(1);
    }

    // sort the text file into array
    while (count < SIZE)
    {
        inputFile >> names[count];
        if (names[count].length() == 1);
        else
        {
            count++;
        }
    }
    showArray(names, SIZE); // This function will show the array on screen 
    system("PAUSE");
    return 0;
}

1 个答案:

答案 0 :(得分:1)

如果您将names更改为std::vector,则可以使用push_back填充它。你可以这样填写names

for (count = 0; count < SIZE; count++)
{
    std::string next;
    inputFile >> next;
    if (next.length() > 1);
    {
        names.push_back(next);
    }
}

或者,您可以将所有字词填入names,然后使用Erase–remove idiom

std::copy(std::istream_iterator<std::string>(inputFile),
          std::istream_iterator<std::string>(),
          std::back_inserter<std::vector<std::string>>(names));

names.erase(std::remove(names.begin(), names.end(), 
                [](const std::string& x){return x.length() == 1;}), names.end());