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

strcmpi integer without a cast error

本文关键字:Strcmpi 整数 错误 转换      更新时间:2023-10-16

我正在尝试创建一个程序,从字符串中删除元音,将它们添加到向量中,然后给用户再次拥有原始代码的可能性。

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

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("),为什么编译器给我这个错误?:

[警告]传递' strcmpi'的arg 1使指针从整数变为没有强制转换的指针

编辑
有人说正确的是s[j] == 'a',但结果是错误的。如果放车,结果仍然是车。不知道为什么。

 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++]; }

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

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

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') {
        ...
    }
}

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

您使用strcmpi函数不正确。它的第一个参数类型为const char *,而您传递的参数类型为char。也就是说,当你只传递一个字符时,函数需要一个字符串。

而且这个函数不是标准的C/c++函数。所以不应该使用

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

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

您已经被告知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] = '';                 // Terminate consonant string
    printf("was: '%s'n", orig);
    printf("is:  '%s'n", cons);
    return 0;
}

表达式strchr检查一个字符是否在字符串中。您可以使用它作为在显式比较中拼出所有元音的快捷方式。