简体   繁体   中英

Reading from a text file into an array

I'm just a beginner for C++

I want to read the text file (maximum of 1024 words) into an array, and I need to ignore all single character words. Can you guys help me to discard words that are single characters to avoid symbols, special characters.

This is my code:

#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;
}

If you change names into a std::vector , then you can populate it using push_back . You could fill names like this.

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

Alternatively you could fill all the words into names and then utilize the 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());

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM