2011-01-21 22 views

risposta

12
void chopN(char *str, size_t n) 
{ 
    assert(n != 0 && str != 0); 
    size_t len = strlen(str); 
    if (n > len) 
     return; // Or: n = len; 
    memmove(str, str+n, len - n + 1); 
} 

Un design alternativo:

size_t chopN(char *str, size_t n) 
{ 
    assert(n != 0 && str != 0); 
    size_t len = strlen(str); 
    if (n > len) 
     n = len; 
    memmove(str, str+n, len - n + 1); 
    return(len - n); 
} 
+0

+1, ma non sarebbe meglio come int, che stampa il numero di caratteri effettivamente rimasti (o -1 invece dell'asserzione)? –

+0

@Tim: ci sono tutti i tipi di possibili design; questa è un'implementazione approssimativamente minima - nel complesso, penso che il compito sia migliore del ritorno anticipato. Per quanto riguarda il valore restituito - Sarei a posto con la restituzione della lunghezza ridotta - molto probabilmente 'size_t' come l'input. –

0

In C, la stringa è una matrice di caratteri in posizioni continue. Non possiamo né aumentare né diminuire la dimensione dell'array. Ma crea un nuovo array di caratteri di dimensioni originali meno 3 e copia i caratteri in un nuovo array.

+1

Copierà i primi tre caratteri della stringa. La domanda chiede come rimuovere * i primi tre caratteri. – mipadi

+0

Sì, appena notato. Cambiato. Grazie. – Mahesh

18

Aggiungere 3 al puntatore:

char *foo = "abcdef"; 
foo += 3; 
printf("%s", foo); 

stamperà "def"

+1

È necessario verificare per prima cosa che siano almeno tre caratteri! – kindall

+0

@kindall: ovviamente ..;) – BlackBear

6

Ad esempio, se si dispone di

char a[] = "123456"; 

il modo più semplice per rimuovere i primi 3 caratteri saranno:

char *b = a + 3; // the same as to write `char *b = &a[3]` 

b conterrà "456"

Ma nel caso generale, si dovrebbe anche fare in modo che la lunghezza della stringa non ha superato

+0

Non solo 'sizeof (char)' ** è inutile **, è anche ** sbagliato ** per altri tipi. L'aritmetica del puntatore avviene in unità di elementi, non in byte. –

+0

Sì, hai ragione. Ho modificato la risposta –

Problemi correlati