C ++:来自Char字符串的WordCount与指针....?

时间:2013-11-15 17:08:19

标签: c++

我想传递一个char字符串作为指针引用,然后计算此字符串中的单词... 但不知何故,我永远无法计算正确数量的单词...... 在这里我的代码:

#include <iostream>
#include <stdio.h>
using namespace std;

int charCount(const char* pPtr);

int main() {

    char wort[] = "Ein Neger mit Gazelle zagt im Regen nie ";
    int count(0);

    count = charCount(wort);
    cout <<count <<endl;

}

int charCount(const char* pPtr) {
    int wordCount(0);

    while(*pPtr != '\0') {      

        //Falls EOF Erreicht und vorheriger Buchstabe war kein Blank oder newline dann Wortzaehler erhoehen
        if ((*pPtr == '\0') && (*(pPtr-1) !=' ' || *(pPtr-1) != '\n')) {
            wordCount++;

        }

        //Falls Blank oder Newline, und vorheriger Buchstabe war kein Blank oder Newline, Wortzaehler erhoehen
        if (((*(pPtr+1) == ' ' || *(pPtr+1) == '\n')) && ((*(pPtr) != ' ' || *(pPtr) != '\n' ))) {
                wordCount++;                
        }       
        pPtr++;

    }
    return wordCount;
}

3 个答案:

答案 0 :(得分:1)

while(*pPtr != EOF)看起来应该是while(*pPtr != NULL)

某些系统上的EOF为0(如NULL),有些系统上的EOF可能为-1或任何其他值。

此外,看起来更好的解决方法是使用某种“状态机”, 即:

int in_word = 0;
while (*pPtr != NULL){
    if ((*pPtr >= 'a' && *pPtr <= 'z') || <same for uppercase>){
        in_word = 1;
    }
    else if (in_word == 1){
        wordCount++;
        in_word = 0;
    }

不确定这是否涵盖了所有内容..但我希望你能得到一般的想法。

答案 1 :(得分:1)

我认为它应该是while(* pPtr!='\ 0')

注意'\ 0'是char数组的结尾,通常,EOF是-1,但是char数组中没有-1,所以循环将超过char数组,直到找到-1 < / p>

int charCount(const char* pPtr) {
int wordCount(0);
int track;
while(*pPtr != NULL) {       
    if ((*pPtr == ' ' || *pPtr == '\n' || *pPtr == '\r')&& track != 0){
        //cout << *pPtr << endl;
        wordCount++;
        track = 0;
    }else if ((*pPtr != ' ' && *pPtr != '\n' && *pPtr != '\r')){
        track++;
    }
    pPtr++;
}
return wordCount;
}

试试这个!

答案 2 :(得分:1)

我认为计算字符串中单词的最简单方法是使用stringstreamming!

#include <iostream>
#include <sstream>
using namespace std;

int charCount(const char* pPtr);

int main() {
    char wort[] = "Ein Neger mit Gazelle zagt im Regen nie ";
    int count(0);
    count = charCount(wort);
    cout <<count <<endl;
}

int charCount(const char* pPtr) {
    int wordCount(0);
    stringstream ss;
    string temp;
    ss<<string(pPtr);
    while(ss>>temp)
        wordCount++;
    return wordCount;
}

http://www.cplusplus.com/reference/sstream/stringstream/