2010-09-22 13 views
5
/* 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; 
} 

Cómo indexaría str para poder reemplazar cada 's' por 'r'.¿Cómo reemplazaría el personaje en este ejemplo usando strchr?

Gracias.

+0

Sólo por curiosidad - es esta tarea, o está tratando para aprender C por su cuenta? –

+0

por mi cuenta ....... –

Respuesta

9

No necesita indizar la cadena. Usted tiene un puntero al carácter que desea cambiar, por lo asigna a través del puntero:

*pch = 'r'; 

En general, sin embargo, que el índice usando []:

ptrdiff_t idx = pch - str; 
assert(str[idx] == 's'); 
+0

sí, eso es lo que estoy buscando gracias. Desreferencia al carácter al que apunta en la cadena y reemplaza al personaje con el nuevo carácter. –

1
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; 
} 

Uso:

reeplachar(str,'s','r'); 
+0

Ok, estaba curioso acerca de cómo obtener el índice del puntero, por lo que escribe hechlo en int con: (int) (ptr-buff)? –

+1

@Tommy sí, esos son los índices, si los quiere todos, necesita una nueva matriz int para almacenar en –

0

siempre que su programa realmente busque el posiciones sin culpa (no lo verifiqué), su pregunta sería ¿cómo puedo cambiar el contenido de un objeto al que mi puntero pch ya apunta?

3

Usted puede usar la siguiente función:

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

Simplemente corre a través de la cadena buscando el carácter específico y lo reemplaza con el nuevo carácter. Cada vez que pasa (como con el suyo), comienza con la dirección uno más allá del carácter anterior para no volver a verificar los caracteres que ya se han comprobado.

También devuelve la dirección de la cadena, un truco utilizado a menudo para que pueda utilizar el valor de retorno, así como con:

printf ("%s\n", chngChar (myName, 'p', 'P')); 
Cuestiones relacionadas