Как бы заменить символ в этом примере, используя strchr? - PullRequest
5 голосов
/ 22 сентября 2010
/* strchr example */
#include <stdio.h>
#include <string.h>

int main ()
{
  char str[] = "This is a sample string";
  char * pch;
  printf ("Looking for the 's' character in \"%s\"...\n",str);
  pch=strchr(str,'s');
  while (pch!=NULL)
  {
    printf ("found at %d\n",pch-str+1);
    pch=strchr(pch+1,'s');
  }
  return 0;
}

Как бы я проиндексировал str, чтобы заменить все 's' на 'r'.

Спасибо.

Ответы [ 4 ]

9 голосов
/ 22 сентября 2010

Вам не нужно индексировать строку.У вас есть указатель на символ, который вы хотите изменить, поэтому присвойте его через указатель:

*pch = 'r';

В общем, вы индексируете, используя []:

ptrdiff_t idx = pch - str;
assert(str[idx] == 's');
3 голосов
/ 22 сентября 2010

Вы можете использовать следующую функцию:

char *chngChar (char *str, char oldChar, char newChar) {
    char *strPtr = str;
    while ((strPtr = strchr (strPtr, oldChar)) != NULL)
        *strPtr++ = newChar;
    return str;
}

Она просто перебирает строку в поисках определенного символа и заменяет ее новым символом.Каждый раз через (как и у вас) он начинается с адреса, выходящего за пределы предыдущего символа, чтобы не перепроверять символы, которые уже были проверены.

Он также возвращает адрес строки, часто используемый приемтак что вы также можете использовать возвращаемое значение, например, с:

printf ("%s\n", chngChar (myName, 'p', 'P'));
1 голос
/ 22 сентября 2010
void reeplachar(char *buff, char old, char neo){
    char *ptr;        
    for(;;){
        ptr = strchr(buff, old);
        if(ptr==NULL) break; 
        buff[(int)(ptr-buff)]=neo;
    }        
    return;
}

Использование :

reeplachar(str,'s','r');
0 голосов
/ 22 сентября 2010

При условии, что ваша программа действительно выполняет поиск позиций без ошибок (я не проверял), ваш вопрос будет состоять в том, как мне изменить содержимое объекта, на который уже указывает мой указатель pch?

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