简体   繁体   中英

How do I extract specific words from a string in a text file? c++

my assignment is to take a string from a text file and count the number of words in it. I've gotten that far but now we have to be able to take a certain number and display that number word to the console. Say my string is "Hello World" if I enter '2' it should give me the result "World". I'm not really sure how my function should look for this. This is my code so far.

void getFileInfo(ifstream &inFile);
string words(ifstream &inFile);
int numOfWords(ifstream& inFile);


int main() {

    ifstream inFile;
    string sentence, fileName;
    int numCount, word;

    getFileInfo(inFile);
    numCount = numOfWords(inFile);
    inFile.clear();  // resets file pointer from the beginning
    inFile.seekg( 0 );
    sentence = words(inFile);

    cout << sentence << ": has " << numCount << " words in it" << endl;
    cout << "Enter a number to extract a word: ";
    cin >> word;


}

void getFileInfo(ifstream &inFile){

    string fileName;

    do{

        cout << "Please enter the filename: " << endl;
        cin >> fileName;

        inFile.open(fileName.c_str());

        if(!inFile){

            cout << "Invalid try again" << endl;

        }
    }while(!inFile);

}

string words(ifstream &inFile){

    string words, theWords;

    getline(inFile, words);
    cout << words;



    return theWords;

}

int numOfWords(ifstream& inFile){

    string fileName, words, str;
    int numCount =0;

    while(inFile >> words){
        ++numCount;
    }

    return numCount;


}

Any suggestions?

Thanks in advance

I would suggest slightly different code for your task. First, write some simple helper functions:

// Clear error flags (EOF, for example) and reset stream to the beginning.
void resetStream(ifstream& stream) {
    stream.clear();
    stream.seekg(0, ios_base::beg);
}

// Count the words in text file stream.
int getWordsCount(ifstream& stream) {
    int count = 0;

    while (stream) {
        string tmp;
        stream >> tmp;
        if (!tmp.empty()) ++count;
    }

    resetStream(stream);

    return count;
}

// Read word by specific number.
string getWordByNumber(int number, ifstream& stream) {
    string word;

    while (number--)
        stream >> word;

    resetStream(stream);

    return word;
}

Now you can easily get the number of words in a file and display a specific word by its number. For example:

int main() {
    string fileName;
    cout << "Enter the file name: \n";
    cin >> fileName;

    ifstream stream(fileName);

    if (!stream)
        cout << "Failed to open file!" << endl;
    else {
        int totalCount = getWordsCount(stream);
        int currentCount = 0;

        cout << "Total words count: " << totalCount << "\n\n";

        do {
            cout << "Enter the word number (enter '0' to finish): ";
            cin >> currentCount;

            if (currentCount == 0) break;
            else if (currentCount > totalCount)
                cout << "Invalid value!\n";
            else {
                string wordByNumber = getWordByNumber(currentCount, stream);
                cout << "Word by number: " << "'" << wordByNumber << "'\n";
            }

            cout << "\n";
        }
        while (true);
    }

    return 0;
}

Warning: This code is not very efficient and I have not tested it much. If you have any problems, be sure to write a comment.

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