Separação de Strings em C

7 respostas
R

Olá, estou criando um algoritmo que faça a separação de Strings da entrada, no caso, uma equação quadrática. Quero separar o a, b e c. Só que a saída não funciona corretamente.

Segue o código:

#include<stdio.h>
#include<stdlib.h>


int main(){

	char equacao[20];
	int i = 0;
	int a, b, c;
	
	printf("Entre com a equação: ");
	scanf("%19[^\n]", equacao);


	for(i = 0; i < 20; i++){

		if (equacao[i] == 'x' && equacao[i + 1] == '²'){
				//a = equacao[i - 1];
			a = atoi(&equacao[i - 1]);
		}
			
		if (equacao[i] == 'x' && equacao[i + 1] != '²'){
			//b = equacao[i - 1];
			b = atoi(&equacao[i - 1]);
		}
			
		if (equacao[i] == ' '){
			//c = equacao[i - 1];
			b = atoi(&equacao[i - 1]);
		}
			
	}
	
	for (i=0; i<20;i++) {
	  printf("campo %d: %c\n", i, equacao[i]);
	}
	
	printf("O valor de a: %d\n", a);
	printf("O valor de b: %d\n", b);
	printf("O valor de c: %d\n", c);
	
}

É necessário que eu converta em inteiro, pois assim que conseguir corrigir este código pretendo usar as variáveis para efetuar cálculos.

Agradeço desde já.

7 Respostas

ViniGodoy

Retire o &, pois assim você pegaria o endereço do caracter, não seu valor.

Se você está lidando com números de um único dígito, é mais fácil subtrair o char ‘0’ do que usar atoi:

Ou seja, ao invés disso:

usar isso:

R

Bom, fiz as alterações no código. Só que ainda não funciona, não consegui a saída desejada. Os coeficientes não são os mesmo, com exceção do b, que fica certo.

#include<stdio.h>  
#include<stdlib.h>  
  
  
int main(){  
  
    char equacao[20];  
    int i = 0;  
    int a, b, c;  
      
    printf("Entre com a equação: ");  
    scanf("%19[^\n]", equacao);  
  
  
    for(i = 0; i < 20; i++){  
  
        if (equacao[i] == 'x' && equacao[i + 1] == '²'){  
                //a = equacao[i - 1];  
            //a = atoi(&equacao[i - 1]); 
			a = (int)(equacao[i-1] - '0'); 			
        }  
              
        if (equacao[i] == 'x' && equacao[i + 1] != '²'){  
            //b = equacao[i - 1];  
            //b = atoi(&equacao[i - 1]);
			b = (int)(equacao[i-1] - '0'); 			
        }  
              
        if (equacao[i] == ' '){  
            //c = equacao[i - 1];  
            //b = atoi(&equacao[i - 1]);  
			c = (int)(equacao[i-1] - '0'); 
		}  
              
    }  
      

      
    printf("O valor de a: %d\n", a);  
    printf("O valor de b: %d\n", b);  
    printf("O valor de c: %d\n", c);  
      
}

Entrada: 4x² + 2x + 5 = 0
Saída:

O valor de a: 3
O valor de b: 2
O valor de c: 13

ViniGodoy

Tente rodar o programa passo-a-passo com o depurador.
É a forma mais fácil de ver o que está acontecendo.

Que IDE você está usando? Visual Studio? Code::Blocks? QT Creator?
(Por favor, não diga que é DevCpp).

JuniorMaia

Vini, já usei muito do Dev C++ e gostei, algo contra ele? É pior que o Code blocks?

ViniGodoy

Sim, muita coisa contra ele:

  1. É pré-histórico. Recomendar DevCpp hoje em dia é o mesmo que recomendar Eclipse 1.1;
  2. Vem com uma versão antiga do compilador MinGW (seria como programar em Java 1.2);
  3. Tem alguns bugs bastante chatos, como omitir parte das mensagens de erro;
  4. Existem alternativas muito melhores no mercado, igualmente gratuitas, igualmente leves e ainda multiplataforma e integradas com depurador.
gomesrod

Os coeficientes B e C funcionam, mas para que encontre o C é preciso colocar um espaço no final da expressão (é o que o if procura).

Quanto ao A, não está funcionando porque a comparação equacao[i + 1] == ‘²’ sempre retorna false. Para comprovar, coloque algumas mensagens de debug quando entra em cada IF ([color=red]printf(“Achou A”)[/color], [color=blue]printf(“Achou B”)[/color], [color=green]printf(“Achou C”)[/color]) vc vai ver que ele entra no “Achou B” duas vezes, e nenhuma no A.

O motivo eu ainda não sei, mas pelo menos vc já tem um ponto de partida para investigar.

R

Aí gente, obrigado pela contribuição de vocês. Efetuei algumas modificações e agora estão funcionando.

Mas o problema é que na ausencia de algum coeficiente ele não detecta como zero.

Por exemplo: 2x² + 9 = 0

deveria aparecer

a=2
b=0
c = 9

Eis a ultima versão do código:

#include<stdio.h>    
#include<stdlib.h>    
    
    
int main(){    
    
    char equacao[20];    
    int i = 0;    
    int a, b, c, teste = 0;    
        
    printf("Entre com a equação: ");    
    scanf("%19[^\n]", equacao);    
    
    
    for(i = 0; i < 20; i++){    
    
        if (equacao[i] == 'x' && equacao[i + 1] != ' '){    
                //a = equacao[i - 1];    
            //a = atoi(&equacao[i - 1]);   
            a = (int)(equacao[i-1] - '0');            
        }    
                
        if (equacao[i] == 'x' && equacao[i + 1] != '²'){    
            //b = equacao[i - 1];    
            //b = atoi(&equacao[i - 1]);  
            b = (int)(equacao[i-1] - '0'); 
			teste = 1;
        }    
                
        if (equacao[i + 2] == '=' && teste == 1){    
            //c = equacao[i - 1];    
            //b = atoi(&equacao[i - 1]);    
            c = (int)(equacao[i] - '0'); 
			teste = 0;
        }    
                
    }    
        
  
        
    printf("O valor de a: %d\n", a);    
    printf("O valor de b: %d\n", b);    
    printf("O valor de c: %d\n", c);    
        
}
Criado 18 de setembro de 2012
Ultima resposta 19 de set. de 2012
Respostas 7
Participantes 4