una - matriz de caracteres en c
Pele el primer y último carácter de la cadena C (4)
Además de la respuesta de @ pmg, tenga en cuenta que puede realizar ambas operaciones en una declaración:
char mystr[] = "Nmy stringP";
char *p = mystr;
p++[strlen(p)-1] = 0;
Es probable que esto funcione como se espera, pero el comportamiento no está definido en el estándar C.
Tengo una cadena C que se parece a "Nmy stringP"
, donde N y P pueden ser cualquier carácter. ¿Cómo puedo editarlo en "my string"
en C?
La forma más eficiente:
//Note destroys the original string by removing it''s last char
// Do not pass in a string literal.
char * getAllButFirstAndLast(char *input)
{
int len = strlen(input);
if(len > 0)
input++;//Go past the first char
if(len > 1)
input[len - 2] = ''/0'';//Replace the last char with a null termination
return input;
}
//...
//Call it like so
char str[512];
strcpy(str, "hello world");
char *pMod = getAllButFirstAndLast(str);
La forma más segura:
void getAllButFirstAndLast(const char *input, char *output)
{
int len = strlen(input);
if(len > 0)
strcpy(output, ++input);
if(len > 1)
output[len - 2] = ''/0'';
}
//...
//Call it like so
char mod[512];
getAllButFirstAndLast("hello world", mod);
La segunda forma es menos eficiente, pero es más segura porque puede pasar literales de cadena a la entrada. También puede usar strdup para la segunda forma si no desea implementarlo usted mismo.
Otra opción, una vez más, asumiendo que "editar" significa que desea modificar en su lugar:
void topntail(char *str) {
size_t len = strlen(str);
assert(len >= 2); // or whatever you want to do with short strings
memmove(str, str+1, len-2);
str[len-2] = 0;
}
Esto modifica la cadena en su lugar, sin generar una nueva dirección como lo hace la solución de pmg. No es que haya algo malo con la respuesta de pmg, pero en algunos casos no es lo que quieres.
Para "quitar" el primer punto de carácter al segundo carácter:
char mystr[] = "Nmy stringP";
char *p = mystr;
p++; /* ''N'' is not in `p` */
Para eliminar el último carácter, reemplazarlo con un ''/ 0''
p[strlen(p)-1] = 0; /* ''P'' is not in `p` (and it isn''t in `mystr` either) */