基本上我正在做的是从一个文件中读取单词,只取出它中的字母,将它们放入一个数组并计算我有多少。问题是我写的方式,当有两个非字母相邻时,会创建另一个单词。我应该在这里改变什么?
#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;
}
答案 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;
}
我希望你能轻松适应其余的问题。