Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Pulse

Strings 3

Recommended Posts

Escrever um programa que leia um caractere digitado pelo usuário e uma string. O programa deve
mostrar na tela:
- a primeira posição onde aparece o caractere digitado e
- quantos caracteres a string possui após a primeira posição onde aparece o caractere digitado.
Se o caractere não aparecer na string, imprimir -1.
#include <stdio.h>
#include <string.h>

int main ()
{
	char s[100], c;
	int i, cont=0, tem=0, posi;

	puts("Digite uma frase");
	fgets(s, 100, stdin);

	puts("Digite um caractere");
	scanf("%c%*c", &c);

	for(i=0; i<strlen(s); i++)
	{
		if(s[i] == c)
		{
			tem = 1;
			posi = i;
			for(i=i+1; i<strlen(s); i++)
			{
				cont++;
			}
		}
	}
	if(tem == 0)
	{
		printf("-1");
	}
	else
	{
		printf("A posicao em que %c aparece eh %d. Ha %d caracteres depois dele", c, posi, cont);
	}
}

O resultado do contador sempre está indicado um valor a mais do que o correto, já mudei o código várias vezes procurando erros mas não consigo encontrar. Alguém sugestão do que pode ser?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Leia o manual do fgets:
http://www.cplusplus.com/reference/cstdio/fgets/

A newline character makes fgets stop reading, but it is considered a valid character by the function and included in the string copied to str.

#include <stdio.h>
#include <string.h>

int main (void)
{
	char frase[100] = "aqui tem uma frase", c='i';
	int index;
	
	char * posicao = strchr(frase, c);
	if (!posicao) {
		puts("Não há esse caractere na string.");
	} else {
		index = (int)(posicao-frase);
		printf("%d\n",index);
		printf("%d\n", strlen(frase)-index-1);
	}
	return 0;
}

http://linux.die.net/man/3/strchr

 

 

Ficar alterando a variável de controle do for em outros lugares que não o terceiro bloco da instrução é pedir p/ dar confusão em algum momento. Não faça isso.

for(i=0; i<strlen(s) && s[i]!=c; i++); // A condição de parada inclui encontrar o caractere.
if (i == strlen(s)) {puts("-1");}
else {
  printf("posição: %d\n Caracteres restantes: %d\n", i, strlen(s)-i-1);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.