字符串中的C ++元音,禁止比较

时间:2014-09-09 10:01:42

标签: c++

我正在尝试计算字符串中元音的总数。我正在使用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;
}

4 个答案:

答案 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::stringstd::getlinechar[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]。假设sentenceabc strlen(sentence)将返回3,并且因为在c ++中,索引从0开始而不是1,因此句子[length]将检查'\ 0'因此在整个循环中,您检查最后一个值'\ 0',这是没有意义的。另外,不要忘记初始化lengthcount。休息所有的事情。

答案 3 :(得分:0)

char sentence [] =“”生成一个长度为1的数组句子。

cin&gt;&gt;句子不能很好地工作,是不是,如果句子不能容纳多个字符,并且后面的nul字节已经需要一个字符?

lengthcount是一个酉变量,其余的代码只会让我头疼。