Hola!!! Bueno, en C++ no conozco un método que no sea el propuesto por leosansan.
Pero hurgando en los papeles encontré una función de biblioteca de C llamada
strtok() (requiere <string.h>) que me despertó curiosidad. Funciona precisamente en casos como éstos, su finalidad es "dividir una cadena en componentes léxicos". Sea la cadena s1, que se quiere dividir en componente léxicos, por medio de un
token separador dado por la cadena (no carácter) s2. Entonces la llamada
strtok(s1, s2);
extrae de s1 el primer componente léxico, hasta llegar al token delimitador (o al final de s1 si no se encontró dicho delimitador). La función devuelve una cadena que corresponde al componente extraído. Las llamadas subsiguientes a
strtok() deben hacerse con NULL como primer argumento, y de allí en adelante se siguen extrayendo los siguientes componentes de la cadena, devolviendo NULL cuando no existan más de ellos.
En el ejemplo a continuación el usuario introduce cualquier secuencia como "1,2,3,4", y el programa devuelve las distintas divisiones encontradas de la cadena, según el delimitador ","
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main() {
char buf[101];
char *s;
scanf( "%s", buf );
if ( ( s = strtok( buf, ",") ) != NULL ) /* primer componente */
printf( "%s\n", s );
while ( ( s = strtok( NULL, ",") ) != NULL ) /* restantes, hasta llegar al final */
printf( "%s\n", s1 );
}
===========================================
(EDITO)
A propósito del tema, estaba revisando que la función
strtok(char* s1, const char *s2) acepta en s2 una cadena donde
cualquiera de sus caracteres puede funcionar como delimitador. Esto puede aumentar la potencia del programa, por ejemplo si
s2=",." entonces cualquiera de los caracteres coma o punto será un delimitador. El programa con la entrada
"1,2.3.4" separará en 1, 2, 3, 4
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main() {
char buf[101];
char *s1;
scanf( "%s", buf );
if ( ( s1 = strtok( buf, ",.") ) != NULL )
printf( "%s\n", s1 );
while ( ( s1 = strtok( NULL, ",.") ) != NULL )
printf( "%s\n", s1 );
}
NOTA. No funciona el espacio como separador debido a scanf(). Si se reemplaza por fgets() sí lo podría aceptar.