我正在尝试编写一个C ++程序,其中计算文本文件中每个单词中的字符数(不仅仅是所有字符的总和)。我在循环中完全定义一个单词的开头和结尾(使用字符)时遇到了问题。如何重新编写此循环以便识别单词并将其中的字符数添加到名为“word?”的变量中。这是我到目前为止所做的:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(){
ifstream fin("file.txt");
int word=0;
char ch;
while(fin && ch!= '.'){
if(ch==' ' || ch=='\n')
word++;
这是错误的,因为某些文本可能有大部分空格,通过这个循环,它将被计为单词中的字符。感谢您的帮助!
答案 0 :(得分:1)
请记住,普通输入操作符>>
会跳过空格。
这意味着您可以阅读std::string
个对象并为每个此类&#34;单词&#34;增加计数器。
答案 1 :(得分:0)
如果循环中的当前字符是使用isalpha(ch);
示例01:
#include <string>
using std::string;
string Sentence = "I'm trying to write a C++ program where the number of characters in each word individually (not just the sum of all characters overall) of a text file is counted.";
int main() {
unsigned WordLength(0);
for (auto i = Sentence.begin(); i != Sentence.end(); ++i) {
if (isalpha(*i))
++WordLength;
}
return 0;
}
当然,您必须决定是否要将C ++中的+'es或'
字符作为单词的一部分进行计数,或者添加逻辑来忽略这些字符。您也可以使用isspace(ch)
。只有在信件不是空格时才计算在内。但是,你需要确保忽略标点符号等。使用ispunct(ch)
可以做到这一点。但是你仍然需要逻辑来处理'
或'+'
之类的特殊情况或者你可能想要计算或不计算的其他字符:D
示例02:
unsigned WordLength(0);
for (auto i = Sentence.begin(); i != Sentence.end(); ++i) {
if (isspace(*i) || ispunct(*i)) {
/// Print length of word then reset
WordLength = 0;
}
else {
++WordLength;
}
}
无论如何,希望它有所帮助! :d
答案 2 :(得分:0)
你可以这样做。
#include<bits/stdc++.h>
using namespace std;
int main()
{
string temp;
int word=0;
ifstream inf("new.txt");
while(inf.good()){
inf>>temp;
if(inf.eof())
break;
word+=temp.length();
}
cout<<word;
return 0;
}
文本文件将逐字读取并复制到“temp”字符串。如果你只计算所有单词的字母,那么你只需要计算字符串。 对于其他操作(对于任何或某些特定字母),您可以检查'temp'字符串。