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++;
}
```````````````````````
比如我选择了一个字符串"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++;
}
```````````````````````