我试图使用'\ 0'作为终止条件使用while循环遍历char数组,但我的问题是它在索引位置481之前没有找到'\ 0',数组被声明为200很久,我无法看到我做错了什么!在任何人要求之前,我不能使用字符串或任何形式的字符串函数。任何人都可以帮忙??
#include <iostream>
using namespace std;
int main()
{
char fullString[200]={'\0'}; // Declare char string of 200, containing null characters
int alphaCount = 0;
int charCount = 0;
int wordCount = 0;
cin.getline(fullString,200); //
cout << "\n\n" << fullString;
cout << "\n\n\n";
int i=0;
int i2 = 0;
while(fullString[i]!='\0'){ //iterate through array until NULL character is found
cout << "\n\nIndex pos : " << fullString[i]; //Output char at 'i' position
while(fullString[i2]!= ' '){ //while 'i' is not equal to SPACE, iterate4 through array
if(isalpha(fullString[i2])){
alphaCount++; // count if alpha character at 'i'
}
charCount++; // count all chars at 'i'
i2++;
}
if(charCount == alphaCount){ // if charCount and alphaCount are equal, word is valid
wordCount++;
}
charCount = 0; // zero charCount and alphaCount
alphaCount = 0;
i=i2;// Assign the position of 'i2' to 'i'
while(fullString[i] == 32){ //if spaces are present, iterate past them
i++;
cout << "\n\ntest1";
}
i2 = i; // assign value of 'i' to 'i2' which is the next position of a character in the array
if(fullString[i] == '\0')
{
cout << "\n\nNull Character " << endl;
cout << "found at pos: " << i << endl;
}
}
cout << "\n\ni" << i;
cout << "\n\nWord" << wordCount;
return 0;
}
答案 0 :(得分:2)
这是因为内部循环不检查终止,它们只是继续循环甚至超过字符串的结尾。
顺便说一下,如果要计算单词,空格和非空格字符的数量,C ++中有更简单的方法。参见例如std::count
and std::count_if
表示空格和字符。例如:
std::string input = "Some string\twith multiple\nspaces in it.";
int num_spaces = std::count_if(std::begin(input), std::end(input),
[](const char& ch){ return std::isspace(ch); });
对于单词,您可以使用std::istringstream
,std::vector
,std::copy
,std::istream_iterator
和std::back_inserter
:
std::istringstream iss(input);
std::vector<std::string> words;
std::copy(std::istream_iterator<std::string>(iss),
std::istream_iterator<std::string>(),
std::back_inserter(words));
在上面的代码之后,words
向量的大小是单词的数量。
如果您使用例如std::copy_if
然后您也可以将上述代码用于其他情况(但std::count_if
更适合单个字符类。)
答案 1 :(得分:2)
正如其他人所指出的,你的问题在于内循环。您测试空格字符但不测试NULL,因此它会迭代超过最后一个单词的末尾,因为在最后一个单词后面没有空格字符。
通过更改您的while条件可以轻松解决此问题:
while(fullString[i2]!= ' ')
......对此:
while(fullString[i2] && fullString[i2]!= ' ')
这会将你的内部while循环更改为第一次测试非NULL,然后测试非空格。
我没有更正你的其余代码,因为我认为这是一个类项目(它看起来像一个),所以我限制了你对问题范围的回答。
答案 2 :(得分:1)
你没有检查内循环
while(fullString[i2]!= ' '){ //while 'i' is not equal to SPACE, iterate4 through array
if(isalpha(fullString[i2])){
alphaCount++; // count if alpha character at 'i'
}
charCount++; // count all chars at 'i'
i2++;
}
...
i=i2;// Assign the position of 'i2' to 'i'
下一个字符是否等于'\ 0'