我想传递一个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;
}
答案 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;
}