如何更改char数组中的字符

时间:2015-03-17 20:21:39

标签: c arrays char

我的函数获取一个char数组作为输入。如果它包含字符e,则将其更改为a并返回新的char数组。这是我的代码:

char echanger(char word[]){

    int total = 0;
    int i;
    char final[5];

    for(i=0;i<5;i++){
        if(word[i]=='e'){
            final[i] == 'a';
        }
        else{
            final[i] == word[i];
        }
    }

    return final;
}

我在main()函数中调用它:

int main(){

    char a[] = "helle";
    printf("new string is: %d \n",echanger(a));

}

它给了我这个输出:

new string is: -48

我在这里失踪了什么?

3 个答案:

答案 0 :(得分:1)

为什么不修改原始字符串而不是创建新字符串?

void echanger(char word[]){

    int i;
    int n = strlen(word);

    for(i=0;i<n;i++){
        if(word[i]=='e'){
            word[i] = 'a';
        }
    }
}

注意: =是作业。 ==是比较。

您需要使用%s中的printf格式说明符来输出字符串。 %d会尝试将字符串作为int读取,它会为您提供奇怪的值。

同样 FWIW char final[5]不足以容纳C字符串"helle"。记住终止空字符。

答案 1 :(得分:1)

您正在使用相等(==)运算符而不是赋值(=)运算符。将final[i] == 'a'更改为final[i] = 'a'

如果我用更改重写函数,那么它将是 -

char echanger(char word[]){

    int total = 0;
    int i;
    char final[5];

    for(i=0;i<5;i++){
        if(word[i]=='e'){
            final[i] = 'a';
        }
        else{
            final[i] = word[i];
        }
    }

    return final;
}

希望它会有所帮助 非常感谢。

答案 2 :(得分:1)

您的程序有几个错误。假设字符串长度。不允许或写入nul终止符。没有返回指针。使用==代表=。试图返回一个局部变量。

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

char *echanger(char *word) {
    int len = strlen(word);
    int i;
    char *final = malloc(len+1);
    for(i=0; i<=len; i++) {         // include terminator
        if(word[i] == 'e')
            final[i] = 'a';
        else
            final[i] = word[i];
    }
    return final;
}

int main(){
    char a[] = "helle";
    char *news;
    news = echanger(a);
    printf("new string is: %s\n", news);
    free(news);                     // was from malloc
    return 0;
}

节目输出:

new string is: halla