Arrays y strpbrk en C

Si mi matriz es:

char* String_Buffer = "Hi my name is  and i have  years old." char* pos = strpbrk(String_buffer, "<"); 

Ahora pos es:

” y tengo años.”

Pero necesito “Hola mi nombre es”. ¿Cómo se puede hacer esto?

Si realiza un seguimiento del start separado, puede “cortar” una sección del búfer:

 char *start = String_Buffer; char *end = strpbrk(String_Buffer, "<"); if (end) { /* found it, allocate enough space for it and NUL */ char *match = malloc(end - start + 1); /* copy and NUL terminate */ strncpy(match, start, end - start); match[end - start] = '\0'; printf("Previous tokens: %s\n", match); free(match); } else { /* no match */ } 

Para recorrer el búfer de impresión de cada token, simplemente cargará esto en un bucle:

 char *start = String_Buffer, *end, *match; while (start) { end = strpbrk(start, "<"); if (!end) { printf("Last tokens: %s\n", start); break; } else if (end - start) { match = malloc(end - start + 1); /* copy and NUL terminate */ strncpy(match, start, end - start); match[end - start] = '\0'; printf("Tokens: %s\n", match); free(match); end++; /* walk past < */ } /* Walk to > */ start = strpbrk(end, ">"); if (start) { match = malloc(start - end + 1); /* start > end */ strncpy(match, end, start - end); match[start - end] = '\0'; printf("Bracketed expression: %s\n", match); free(match); start++; /* walk past > */ } } 

Primero, asegúrese de que la cadena con la que está trabajando esté en la memoria modificable 1 :

 char String_Buffer[] = "Hi my name is <&1> and i have <&2> years old." 

luego, corta la cuerda en la posición donde encontraste < :

 char* pos = strpbrk(String_buffer, "<"); if(pos!=NULL) { /* changing the '<' you found to the null character you are actually * cutting the string in that place */ *pos=0; } 

Imprimiendo String_Buffer ahora saldrá Hi my name is . Si no quieres el espacio final, simplemente mueve pos hacia atrás de un elemento (teniendo cuidado de no ir antes del comienzo de String_Buffer ).


  1. En su código, declaró un puntero char y lo hizo apuntar a una cadena literal, que no es modificable (por eso normalmente escribe const char * str = "asdasads"; ; en este caso, en su lugar, estamos inicializando un char local). Array, que podemos cambiar tanto como queramos.