Jump to content
AprendizZ

Concatenação de strings numa só string.

Recommended Posts

AprendizZ

Estou a fazer um exercício que implica a separação de uma cadeia de caracteres matemáticos mas não estou a conseguir concatenar os caracteres numéricos numa só string.

Por exemplo a expressão 2*(3.5/3)+(1+1.7) deverá resultar em 2,*,(,3.5,/,3,),+,(,1,+,1.7,)  só que até ao momento só consigo que me saia 2,*,(,3,.,5,/,3,),+,(,1,+,1,.,7,)

Eis o código que estou a usar:

#define MAX_LEN 256
#define MAX_L 6

char contas [MAX_LEN][MAX_LEN];
char alfa [MAX_L] = {'+','-','*','/','(',')'};
int n_contas;

// -------------------------------------------------
void remove_ultimo (char *s)
{
assert (*s != '\0');
while (*s)
	s++;
*(s-1) = '\0';
}

int procurar (char x)
{
int i;
for (i = 0;i < MAX_L;i++)
{
	if (alfa[i] == x)
		return i;
}
return -1;
}

// ---------------------------------- funções

void read_contas (FILE *f)
{
char temp[MAX_LEN];
int i, nt;
n_contas = 0;
while (fgets (temp,MAX_LEN,f) != NULL)
{
	char temp2[MAX_LEN];
	int nt2;
	nt2 = 0;
	remove_ultimo(temp);
	nt = strlen(temp);
	for (i = 0;i < nt;)
	{
		if (temp[i] == ' ')
		{
			i++;
		}
		else
		{
			if (procurar(temp[i]) != -1)
			{
				strcpy(&temp2[nt2],&temp[i]);
				nt2++;
				i++;
			}
			else
			{
				if (i < nt && procurar(temp[i+1]) != -1)
				{
// alterar aqui para inserir a cadeia de caracteres numéricos com o ultimo (ou único) caracter numérico
					strcpy(&temp2[nt2],&temp[i]);
					nt2++;
					i++;
				}
				else
				{
// alterar aqui para concatenar a cadeia de caracteres numéricos que vai encontrando
					strcpy(&temp2[nt2],&temp[i]);
					nt2++;
					i++;
				}
			}
		}
	}
	strcpy(contas[n_contas],temp2);
	n_contas++;
}
}

void write_contas (FILE *g)
{
char v[MAX_LEN];
int i, j, nv;
for (i = 0;i < n_contas;i++)
{
	strcpy(v,contas[i]);
	nv = strlen(v);
	for (j = 0;j < nv;j++)
	{
		fprintf (g, "%c", v[j]);
		if (j < nv-1)
			fprintf (g, ",");
	}
	fprintf (g, "\n");
}
}

void teste_base (FILE *f, FILE *g)
{
	read_contas (f);
	write_contas (g);
}

int main (void)
{
teste_base(stdin,stdout);
return 0;
}

Agradecia uma ajudinha. Obrigado.

Share this post


Link to post
Share on other sites
Strabush

O que estás a fazer é simplesmente copiar dado á dado e depois imprimi-lo.

Já reparaste que os números que estão a dar problema, 1.7 e 3.5, são separados por pontos?

Se calhar uma condição/restrição qualquer dava jeito para pular estes pontos e incluir também o número a seguir na variável.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.