2011-01-21 11 views

Respuesta

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 diseño 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, pero ¿no sería mejor que int, que imprime el n. ° de caracteres restantes (o -1 en lugar de la afirmación)? –

+0

@Tim: hay todo tipo de diseños posibles; esta es una implementación aproximadamente mínima: en general, creo que la tarea es mejor que el retorno anticipado. En cuanto al valor de retorno, estaré de acuerdo con devolver la longitud reducida, eso sería 'size_t' como la entrada, lo más probable. –

0

En C, la cadena es una matriz de caracteres en ubicaciones continuas. Tampoco podemos aumentar o disminuir el tamaño de la matriz. Pero crea una nueva matriz de caracteres de tamaño original menos 3 y copia los caracteres en una nueva matriz.

+1

Eso copiará los primeros tres caracteres de la cadena. La pregunta pregunta cómo * eliminar * los primeros tres caracteres. – mipadi

+0

Sí, lo acabo de notar. Lo cambié. Gracias. – Mahesh

18

Añadir 3 al puntero:

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

imprimirá "def"

+1

¡Primero compruebe que tenga al menos tres caracteres de largo! – kindall

+0

@kindall: por supuesto ...;) – BlackBear

6

Por ejemplo, si usted tiene

char a[] = "123456"; 

la forma más sencilla de eliminar los 3 primeros caracteres serán:

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

b contendrá "456"

Pero en caso general también debe asegurarse de que la longitud de cadena no superó

+0

No solo es 'sizeof (char)' ** inútil **, también es ** wrong ** para otros tipos. La aritmética del puntero se lleva a cabo en unidades de elementos, no en bytes. –

+0

Sí, tienes razón. Han editado la respuesta –

Cuestiones relacionadas