没有强制转换错误的strcmpi整数

时间:2014-03-11 21:00:20

标签: c++ c strcmp

我试图创建一个程序,从字符串中删除元音,将它们添加到矢量中,然后让用户再次拥有原始代码。

在我的代码中,我有这个:

char s[20];

在我进行这种比较后不久:

for(j=0;j<tam;j++)
{
    if(strcmpi(s[j],"a")==1 ||
       (strcmpi(s[j],"e")==1 ||
       (strcmpi(s[j],"i") ==1||
       (strcmpi(s[j],"o") ==1||
       (strcmpi(s[j],"u")==1))
    {

因此,如果数组是char并且元音是char(&#34;&#34;),为什么编译器会给我这个错误?:

[警告]传递`strcmpi&#39;的arg 1从没有强制转换的整数生成指针

修改
有人说正确的是s [j] ==&#39; a&#39;,但结果是错误的。如果放车,结果仍然是车。不知道为什么。

 if(s[j] == 'a' || 
    s[j] == 'A' || 
    s[j] == 'e' || 
    s[j] == 'E' || 
    s[j] == 'i' || 
    s[j] == 'I' || 
    s[j] == 'o' || 
    s[j] == 'O' || 
    s[j] == 'u' || 
    s[j] == 'U') 
 {
    s[j] = s[j++]; }

5 个答案:

答案 0 :(得分:5)

Strcmpi用于比较字符串。 strcmpi的第一个参数是char类型,当它需要char*

为了比较单个字符,s[j]=='e'就足够了,或tolower(s[j])=='e'如果您需要它不区分大小写。您需要ctype.h.包含tolower

答案 1 :(得分:2)

strcmpi的参数必须是字符串,但s[j]只是一个字符,而不是字符串。您可以使用==直接比较字符。要进行不区分大小写的比较,首先获取字符的小写版本并进行比较。

for (j = 0; j < tam; j++) {
    char lower = tolower(s[j]);
    if (lower == 'a' || lower == 'e' || lower == 'i' || lower == 'o' || lower == 'u') {
        ...
    }
}

答案 2 :(得分:0)

您不想使用strcmp或其任何变体。 因为您想知道字符串是否包含元音,所以您可能希望使用strstr进行子字符串搜索。

答案 3 :(得分:0)

您错误地使用了函数strcmpi。当您传递类型为const char *的参数时,第一个参数的类型为char。也就是说,当你只传递一个字符时,函数需要一个字符串。

此外,此功能不是标准的C / C ++功能。所以不应该使用它。

您可以使用以下方法获得相同的结果

char vowels[] = "aeiou";
//...
if ( strchr( vowels, tolower( s[j] ) )
{
   std::cout << s[j] << " is a vowel" << std::endl;
}

答案 4 :(得分:0)

您已被告知strcmpi不是检查单个字符的正确方法。这是对您的问题的编辑的答案,您可以询问实际剥离元音的问题。

如果要保留原始字符串,则需要额外的内存,而不需要辅音。您还需要两个索引,因为一旦跳过原始字符串中的元音,索引就会不同步。这是一个示例实现:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main()
{
    char orig[] = "Jackdaws love my big sphinx of quartz.";
    char cons[sizeof(orig)];        // Make new char buffer as big
                                    // as the original

    int i, j;

    j = 0;
    for (i = 0; orig[i]; i++) {
        if (strchr("AEIOUaeiou", orig[i]) == NULL) {
            cons[j++] = orig[i];
        }
    }
    cons[j] = '\0';                 // Terminate consonant string

    printf("was: '%s'\n", orig);
    printf("is:  '%s'\n", cons);

    return 0;
}

表达式strchr检查字符是否在字符串中。您可以将其用作快速拼写显式比较中的所有元音。