我想这样做:在同一时间读取该文件中的一个字。 (使用一个字符串来做到这一点)计算三两件事:单字符的话有多少是在该文件中,有多少短(2至5个字符)的话是在该文件中,有多少长(6个或更多字符)的话是在文件。 帮助在这里
IM在不知道如何阅读有关文件转换成字符串。 我知道我有这样的事情,但我不明白的休息。 帮助在这里
ifstream infile;
//char mystring[6];
//char mystring[20];
int main()
{
infile.open("file.txt");
if(infile.fail())
{
cout << " Error " << endl;
}
int numb_char=0;
char letter;
while(!infile.eof())
{
infile.get(letter);
cout << letter;
numb_char++;
break;
}
cout << " the number of characters is :" << numb_char << endl;
infile.close();
return 0;
我不太知道从哪里开始?
您的循环:
while(!infile.eof())
{
infile.get(letter);
cout << letter;
numb_char++;
break;
}
只会造成的额外执行一次break;
另外这个代码看起来是试图读取字符数在一个文件中,而不是计数是5个字母或大于6个字母的单词数。
尝试是这样的:
ifstream infile;
int main(){
infile.open("file.txt");
if(!infile.good()){
cout << " Error " << endl;
return 1;
}
int shortCount = 0;
int mediumCount = 0;
int longCount = 0;
int charCount = 0;
char letter;
while(!infile.eof()){
infile >> letter;
if(letter == ' ' || char == EOF){ // end of word or file.
if(charCount == 1)
shortCount++;
else if(charCount < 6)
mediumCount++;
else
longCount++;
charCount = 0;
}else{
charCount++;
}
}
cout << "Short Words: " << shortCount << endl;
cout << "Medium Words: " << mediumWords << endl;
cout << "Long Words: " << longWords << endl;
infile.close();
return 0;
}
可能是一个Unicode的问题,你可能要检查的文件的编码,如果是Unicode,你将需要使用适当的方法wfstream
和类型wchar_t
。 Unicode的越来越普遍,我也不会感到惊讶,如果这是你的问题的根源。
#include <cctype>
#include <string>
#include <vector>
#include <iostream>
using namespace std;
string s;
vector< int > word_length_histogram;
while ( cin >> s ) // attempt to get a word and stop loop upon failure
{
while ( ispunct( * --s.end() ) ) s.erase( --s.end() ); // strip punctuation
if ( s.size() >= word_length_histogram.size() ) {
word_length_histogram.resize( s.size() + 1 );
} // make sure there's room in the histogram
++ word_length_histogram[ s.size() ];
}
最后, word_length_histogram[1]
为1个字符的单词的数量, word_length_histogram[2]
有2个字符的话,数量等,添加了范围的内容中word_length_histogram
得到你想要的具体统计数据。
正如我所说...你正在读一个字符,然后你的循环的打破了...不break
。
至于如何做到这一点?一个办法是定义3个柜台, int fiveMinusLetterWord
, int sixPlusLetterWord
和int singleLetterWord
。 数字符,直到letter == ' '
。 当你打的空间,看看你有多少个字符阅读 - 这是前一个单词的长度。 增量如果需要你一个计数器,重置您的字符计数器,并继续untl文件的末尾。 记住循环退出后要检查的最后一个字的长度。 你也将不得不因为你读一次一个字符处理结束行分隔符。
因为这方面的一个更简单的方法是C ++是使用istream& getline ( istream& is, string& str );
从<string>
和读取一行行成std::string
则使用std::string
函数来找到你的话。
编辑:我错过了你的问题的一部分,说:“在某一时刻一个字读”。 看看对方的回答,您可以使用的std :: string从流中读取一个字。
vector<string> words;
int cLength = 0;
long shortWords, medWords, longWords;
boost::algorithm::split(inputString, is_any_of(" .,-_=+;()[]\\/ [etc]"), words, token_compress_on);
for ( unsigned long i = 0; i < words.size(); i++ )
{
cLength = words[i].size();
if ( cLength < 2 ) // short word
{
shortWords++;
} else if ( cLength < 6 ) {
medWords++;
} else {
longWords++;
}
}
文章来源: im counting the number of characters in a file but i want to count the number of words that are less than 5 and 6 or greater