2010-09-22 19 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; 
} 

Come indicizzerei lo str in modo che sostituissi ogni 's' con 'r'.Come sostituire il carattere in questo esempio usando strchr?

Grazie.

+0

Solo curioso - è questo compito, o stai cercando imparare C da solo? –

+0

da solo ....... –

risposta

9

Non è necessario indicizzare la stringa. Si dispone di un puntatore al carattere che si desidera modificare, in modo da assegnare tramite il puntatore:

*pch = 'r'; 

In generale, però, è indice utilizzando []:

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

sì, questo è quello che sto cercando grazie. Rimuove il riferimento al carattere a cui punta nella stringa e sostituisce il carattere con il nuovo carattere. –

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, ero curioso di sapere come ottenere l'indice dal puntatore, quindi devi scriverlo su int con: (int) (ptr-buff)? –

+1

@Sommy si, quelli sono gli indici, se li vuoi tutti, hai bisogno di un nuovo array int per archiviare in –

0

A condizione che il tuo programma cerchi davvero posizioni senza colpa (non ho controllato), la tua domanda sarebbe come posso cambiare il contenuto di un oggetto a cui il mio puntatore pch sta già puntando?

3

È possibile utilizzare la seguente funzione:

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

Funziona semplicemente attraverso la stringa di ricerca del carattere specifico e lo sostituisce con il nuovo carattere. Ogni volta attraverso (come con il tuo), inizia con l'indirizzo uno oltre il carattere precedente in modo da non ricontrollare i caratteri che sono già stati controllati.

Inoltre restituisce l'indirizzo della stringa, un trucco spesso utilizzato in modo che è possibile utilizzare il valore di ritorno come pure, come ad esempio con:

printf ("%s\n", chngChar (myName, 'p', 'P')); 
Problemi correlati