我正在尝试计算字符串中元音的总数。我正在使用strlen来获取字符串的总长度,但是当我尝试通过每个字母计算字符串时,它表示C ++禁止比较。所以我认为我的if语句中有些错误。
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char sentence[] = "";
int count;
int total;
int length;
int lengthcount;
int output;
output = 0;
length = 0;
count = 0;
total = 0;
cin >> total;
while (total != count){
cin >> sentence;
length = strlen(sentence);
while (length != lengthcount)
if (sentence[length] == "a" ||sentence[length] == "e"||sentence[length] == "i"||sentence[length] == "o"||sentence[length] == "u"||sentence[length] == "y"){
++ output;
++ lengthcount;
else{
++lengthcount;
}
}
++count;
}
return 0;
}
答案 0 :(得分:4)
sentence[length]
是一个单一字符。它应与'a'
而不是"a"
进行比较。
"a"
是一个字符数组,不支持与内置operator==
直接比较。
sentence[index] == 'a'; // where index is probably lengthcount in your example
应该做的伎俩。如果使用std::string
是一个选项,则应该优先使用char
数组。
此外,您的char sentence[] = "";
还需要比'\0'
字符更多的空间。一些替代方案包括std::string
和std::getline
或char[nnn]
与cin.get(...)
的使用,以确保您不会超出您分配的缓冲区。
答案 1 :(得分:2)
请参阅Nialls的答案,了解其中一个主要问题。
您的代码的算法问题再次出现在if
语句中。
sentence[length]
返回c_string的最后一个字符(在这种情况下,是终止字符串的空字符'/0'
)。
你的if语句看起来应该更像:
if (sentence[lengthcount] == 'a'\
||sentence[lengthcount] == 'e'\
||sentence[lengthcount] == 'i'\
||sentence[lengthcount] == 'o'\
||sentence[lengthcount] == 'u'\
||sentence[lengthcount] == 'y')
{
\\do something
}
请记住也要为字符串预先分配空间,即
char sentence[50];
这将为49个字符+终结符提供空间。
或者,使用std::string
答案 2 :(得分:1)
如果您希望计算给定字符串中的元音总数,则需要使用sentence[lengthcount]
。假设sentence
是abc
strlen(sentence)
将返回3,并且因为在c ++中,索引从0开始而不是1,因此句子[length]将检查'\ 0'因此在整个循环中,您检查最后一个值'\ 0',这是没有意义的。另外,不要忘记初始化lengthcount。休息所有的事情。
答案 3 :(得分:0)
char sentence [] =“”生成一个长度为1的数组句子。
cin&gt;&gt;句子不能很好地工作,是不是,如果句子不能容纳多个字符,并且后面的nul字节已经需要一个字符?
lengthcount是一个酉变量,其余的代码只会让我头疼。