从文件C ++向字符串数组添加单词

时间:2016-02-03 00:34:19

标签: c++

基本上我正在做的是从一个文件中读取单词,只取出它中的字母,将它们放入一个数组并计算我有多少。问题是我写的方式,当有两个非字母相邻时,会创建另一个单词。我应该在这里改变什么?

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

int main() {
    string str[10000];
    string temp = "";
    char c;
    int i = 0, count = 0;

    //Open file
    fstream sample;
    sample.open("sample.txt");

    while (!sample.eof()){
            sample.get(c);

            //convert character to lowercase and append to temp. string
            if ((c>=65 && c<=90) || (c>=97 && c<=122)){
                    c = tolower(c);
                    temp += c;
            }
 //when a word ends, add it to array and add 1 to the word count
            else if (c<65 || (c>90 && c<97) || c>122){
                    str[i] = temp;
                    count++;
                    i++;
                    temp = "";
            }
    }
    sample.close();

    cout << "The number of words found in the file was " << count << endl;

    return 0;
}

1 个答案:

答案 0 :(得分:0)

首先,如果可以,请避免在类之外使用C ++中的原始数组,这些数组可以通过析构函数等控制数组的生命周期。这样做是很好的做法。而是使用标准库提供的容器类(如vector,array,...)。

其次,您可以使用stringstream来更轻松地从文件中获取单词。

请注意使用namespace std; 。这也是考虑的问题 糟糕的做法。

您获取字符串的问题稍微好一点的例子:

#include <iostream>
#include <sstream>
#include <fstream>
#include <vector>
#include <string>

int main() {
    std::vector<std::string> str;

    // Open the file
    std::ifstream sample("sample.txt");

    std::stringstream strm;
    strm << sample.rdbuf();
    while(strm) {
        std::string word;
        strm >> word;
        if (word.empty()) continue;
        str.push_back(word);
    }

    std::cout << "Word count: " << str.size() << std::endl;
}

我希望你能轻松适应其余的问题。