Se me ocurre algo asi:
Código C:
Ver original#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[])
{
char strA[100],strB[100];
char *p1,*p2;
char separador[]=",";
int avance,n1,n2,total=0;
printf("Introduce la primera secuencia de numeros separados por comas: "); printf("Introduce la segunda secuencia de numeros separados por comas: ");
//Punteros para recorrer ambas cadenas
p1=strA;
p2=strB;
//Si alguna de las dos esta vacia pongo su puntero a null
p1=NULL;
p2=NULL;
//Recorro este bucle hasta que ambos punteros apunten a NULL
while(p1 != NULL || p2 != NULL){
if(p1 != NULL){ //Si el puntero a la primera cadena apunta a NULL
avance
=sscanf(p1
,"%d",&n1
); //Obtengo un numero if(avance == -1){
//Este caso se da si intenta obtener un numero de una cadena vacia
avance=0; //Pongo el avance a 0
n1=0; //Pongo el numero a 0
}else if(avance == 0){
//Este caso se da al intentar obtener un numero y que no se pueda
//porque los caracteres no se corresponden
avance=1; //Hago que avance 1 posicion
n1=0; //Pongo el numero a 0
}
p1
=strpbrk(p1
+avance
,separador
); //Avanzo a la siguiente coma if(p1!=NULL) //Si no obtuve NULL
p1++; //Paso la coma incrementando la direccion del puntero
}else{ //Si el puntero a la primera cadena es NULL
n1=0; //Pongo el numero a cero
}
if(p2 != NULL){
if(avance == -1){
avance=0;
n2=0;
}else if(avance == 0){
avance=1;
n2=0;
}
if(p2!=NULL)
p2++;
}else{
n2=0;
}
total += (n1+n2);
if(p1 != NULL || p2 != NULL)
}
return 0;
}
Solo comento una parte porque la otra es igual, es mas, podria crear una funcion y usarla para ambos casos:
Código C:
Ver original#include <stdio.h>
#include <string.h>
char* ObtenerNumero(int *n, char *p, char separador)
{
int avance;
if(p != NULL){ //Si el puntero a la primera cadena apunta a NULL
avance
=sscanf(p
,"%d",n
); //Obtengo un numero if(avance == -1){
//Este caso se da si intenta obtener un numero de una cadena vacia
avance=0; //Pongo el avance a 0
*n=0; //Pongo el numero a 0
}else if(avance == 0){
//Este caso se da al intentar obtener un numero y que no se pueda
//porque los caracteres no se corresponden
avance=1; //Hago que avance 1 posicion
*n=0; //Pongo el numero a 0
}
p
=strpbrk(p
+avance
,&separador
); //Avanzo a la siguiente coma if(p!=NULL) //Si no obtuve NULL
p++; //Paso la coma incrementando la direccion del puntero
}else{ //Si el puntero a la primera cadena es NULL
*n=0; //Pongo el numero a cero
}
return p;
}
int main(int argc, char* argv[])
{
char strA[100],strB[100];
char *p1,*p2;
char separador=',';
int n1,n2,total=0;
printf("Introduce la primera secuencia de numeros separados por comas: "); printf("Introduce la segunda secuencia de numeros separados por comas: ");
//Punteros para recorrer ambas cadenas
p1=strA;
p2=strB;
//Si alguna de las dos esta vacia pongo su puntero a null
p1=NULL;
p2=NULL;
//Recorro este bucle hasta que ambos punteros apunten a NULL
while(p1 != NULL || p2 != NULL){
p1=ObtenerNumero(&n1,p1,separador);
p2=ObtenerNumero(&n2,p2,separador);
total += (n1+n2);
if(p1 != NULL || p2 != NULL)
}
return 0;
}
Intenta depurarlo para entender como funciona.
Editado:
Te preguntarás que que ventajas tiene usar una funcion en un caso tan simple y aqui un ejemplo:
Código C++:
Ver original#include <stdio.h>
#include <string.h>
#define ELEMENTOS 4
char* ObtenerNumero(int *n, char *p, char separador)
{
int avance;
if(p != NULL){ //Si el puntero a la primera cadena apunta a NULL
avance
=sscanf(p
,"%d",n
); //Obtengo un numero if(avance == -1){
//Este caso se da si intenta obtener un numero de una cadena vacia
avance=0; //Pongo el avance a 0
*n=0; //Pongo el numero a 0
}else if(avance == 0){
//Este caso se da al intentar obtener un numero y que no se pueda
//porque los caracteres no se corresponden
avance=1; //Hago que avance 1 posicion
*n=0; //Pongo el numero a 0
}
p
=strpbrk(p
+avance
,&separador
); //Avanzo a la siguiente coma if(p!=NULL) //Si no obtuve NULL
p++; //Paso la coma incrementando la direccion del puntero
}else{ //Si el puntero a la primera cadena es NULL
*n=0; //Pongo el numero a cero
}
return p;
}
int main(int argc, char* argv[])
{
char str[ELEMENTOS][100];
char *p[ELEMENTOS];
char separador=',';
int n[ELEMENTOS],total=0,i,noNull;
for(i=0;i<ELEMENTOS;i++){
printf("Introduce la secuencia [%i] de numeros separados por comas: ",i
);
//Punteros para recorrer ambas cadenas
p[i]=str[i];
//Si alguna de las dos esta vacia pongo su puntero a null
p[i]=NULL;
else
noNull=1;
}
//Recorro este bucle hasta que ambos punteros apunten a NULL
while(noNull != 0){
noNull=0;
for(i=0;i<ELEMENTOS;i++){
p[i]=ObtenerNumero(&n[i],p[i],separador);
total += n[i];
if(p[i] != NULL)
noNull=1;
if(i<ELEMENTOS-1)
}
if(noNull==1)
}
return 0;
}
Solo con cambiar el valor de ELEMENTOS podras añadir o quitar elementos y sin tocar nada mas mientras que si lo hicieras sin funciones tendrias que estar añadiendo o quitando lineas de codigo.