C中的字符串:互相替换字符

String in C: replace characters with each other

比如我选择了一个字符串"sdoeoeeoasd"。我应该将所有 'o' 替换为 'e',反之亦然:"sdeoeooeasd"。我打算用 string 库来做到这一点。

我发现了一个非常相似的问题 (Standard function to replace character or substring in a char array?),但我不知道如何根据我的情况使代码工作。刚好第一个出现的字符被替换,然后唯一一个字符替换:

char* replace_char(char* str, char find, char replace){
    char temp = find;
    char *current_pos = strchr(str,find); 
    char *current_posc2 = strchr(str,replace); 

    while (current_pos) {
        *current_pos = replace;
        current_pos = strchr(current_pos,find);
    }
        while (current_posc2) {
        *current_posc2 = find; 
        current_posc2 = strchr(current_posc2, replace);
    }
    return str;
}

使用 c1='e'c2='o' 我得到:

我考虑过添加第三个 temp 变量,但我对其实施的建议是错误的,没有奏效。

另一个解决方案:

int i=0;
while(ch[i])
{
if(ch[i] == 'e')
ch[i]='o';
else if(ch[i] == 'o')
ch[i]='e';
i++;
}

您的代码不起作用,因为它用第二个字符替换了所有第一个字符,然后用第一个字符替换了所有第二个字符。它在第二步中完全撤销了第一步的工作。一次只遍历字符串一个字符要简单得多,就像在 Bouraoui Al-Moez L.A 的代码中一样。

做一个循环:

char *replace_char(char *str, char find, char replace) {
    char *str2 = str; // save str for return value
    while (*str2) {
        if (*str2 == find) *str2 = replace;
        else if (*str2 == replace) *str2 = find;
        str2++;
    }
    return str;
}

不需要使用两个循环

char *replace_char(char *str, char find, char replace) {
    char *ptr = str;
    while (*ptr) {
        if (*ptr == find) *ptr = replace;
        else if (*ptr == replace) *ptr = find;
        ptr++;
    }
    return str;
}

你也可以使用语法数组

int j=0;
while(str[j] !='[=11=]') // will loop on your string till the end of it
{
if(str[j] == 'e')  // if char=e will be o
str[j]='o';
else if(str[j] == 'o')  // if char=o will be e
str[j]='e';
j++;
}
```````````````````````