C ++查找文本文件的每个单词中的字符数

时间:2017-01-10 05:19:49

标签: c++ loops

我正在尝试编写一个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++;

这是错误的,因为某些文本可能有大部分空格,通过这个循环,它将被计为单词中的字符。感谢您的帮助!

3 个答案:

答案 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'字符串。