C函数删除字符串中的元音不起作用?

时间:2018-04-22 16:27:56

标签: c string pointers

这是我删除字符串中元音的功能;

char *removeVowels(char *inString) {

    int count = 0; //to count the non vowel characters

    for (int i = 0; inString[i]; i++)
        if (inString[i] != 'a' || inString[i] != 'e' || inString[i] != 'u' || inString[i] != 'o' || inString[i] != 'i')
            inString[count++] = inString[i]; //if character is not a vowel placed at count++  

    inString[count] = '\0';

    return inString;
}

问题是它返回了输入的原始字符串。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

||&&运营商之间存在混淆。您想测试该字符与'a' AND 'e'等不同的字符。

以下是修改后的版本:

char *removeVowels(char *inString) {
    int count = 0; // index for preserved characters

    for (int i = 0; inString[i]; i++) {
        if (inString[i] != 'a' && inString[i] != 'e' && inString[i] != 'i'
        &&  inString[i] != 'o' && inString[i] != 'u') {
            inString[count++] = inString[i]; // copy the non-vowel character
        }
    }
    inString[count] = '\0';  // set the null terminator.

    return inString;
}

但请注意,此功能不会删除大写元音,y是否应被视为元音仍有待决定。

答案 1 :(得分:1)

如另一条评论中所述,您需要使用&&而不是||确保角色与任何元音都不匹配。可能更容易创建一个新字符串,并在您去的时候向该字符串添加非元音。类似的东西:

char *removeVowels(char *inString, int size){
    char newString[size];
    int count = 0;

    for(int i = 0; i < size; i++){
        if(inString[i] != 'a' && inString[i] != 'e' && inString[i] != 'i' && inString[i] != 'o' && inString[i] != 'u'){
            newString[count] = inString[i];
            count++;
        }
    }
    newString[count] = '\0';

    return newString;
}