Строка в C: заменить символы друг на друга - PullRequest
0 голосов
/ 06 мая 2020

Например, я выбираю строку «sd oeoeeo asd». Я должен заменить все «o» на «e» и наоборот: «sd eoeooe asd». Я намерен сделать это с помощью string lib.

Я нашел довольно похожий вопрос ( Стандартная функция для замены символа или подстроки в массиве символов? ), но я не узнать, как заставить код работать в соответствии с моим условием. Бывает, что первое вхождение символа заменяется, а затем заменяется только один символ:

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' Я получаю:

enter image description here

Я хотел добавить третью переменную temp, но мои предложения по ее реализации были неправильными и не сработали.

Ответы [ 4 ]

3 голосов
/ 06 мая 2020

Другое решение:

int i=0;
while(ch[i])
{
if(ch[i] == 'e')
ch[i]='o';
else if(ch[i] == 'o')
ch[i]='e';
i++;
}
1 голос
/ 06 мая 2020

Сделать 1 л oop:

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;
}
1 голос
/ 06 мая 2020

Ваш код не работает, потому что он заменяет весь первый символ вторым символом, а затем заменяет весь второй символ первым символом. Это полностью отменяет работу первого шага на втором шаге. Гораздо проще просто перебирать строку по одному символу за раз, как в коде Bouraoui Al-Moez LA.

0 голосов
/ 10 мая 2020

нет необходимости использовать два цикла

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] !='\0') // 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++;
}
```````````````````````

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...