• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

bsr

Contar quantas vezes o caracter aparece na string.

5 mensagens neste tópico

A ideia é definir uma funcao  int conta(char c, char *s) que conta o numero de ocorrencias do caracter c na string s (terminada com caracter nulo).

Chaguei ao seguinte codigo:


#include <stdio.h>

int conta(char c, char *s){

int i;
int n = 0;

for(i=0; s[i] != '\0';i++){
if(s[i] == c)
	n = n+1;
}

return n;
}

int main(){

char s[20];
char c[1];

printf("Insira a string\n");
scanf("%s",s);

printf("Insira o caracter\n");
scanf("%c",c);

printf("O caracter aparece %d vezes\n",conta(c,s));        (o aviso esta a referir-se a esta linha)

return 0;
}

esta a dar-me o seguinte aviso, alem de não esta a funcionar:

warning: passing argument 1 of ‘conta’ makes integer from pointer without a cast

E mais, quando executo o programa deixa inserir a string mas não pede para inserir o caracter.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em relação ao warning: passing argument 1 of ‘conta’ makes integer from pointer without a cast,

Na minha cabeça tava uma grande confusão, queria declarar um caracter e declarei um array de uma posição em vez de declarar um char c = 'caracter';

o codigo ficou assim


#include <stdio.h>

int conta(char c, char *s){

int i;
int n = 0;

for(i=0; s[i] != '\0';i++){
if(s[i] == c)
	n = n+1;
}

return n;
}

int main(){

char s[20]; 
char c;

printf("Insira a string\n");
scanf("%s",s);

printf("Insira o caracter\n");
scanf("%c",&c);

printf("O caracter aparece %d vezes\n",conta(c,s));

return 0;
}

O problema que ainda continua é que insiro a string e nem pede para inserir o caracter, alguma sugestão.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso é um problema típico. Vou tentar explicar-te o melhor que conseguir:

1- Imagina que a string em que tu quereres fazer a procura é "batata"

2- Tu escreves "batata"

3- Depois carregas enter

4- E é aqui que perdes o fio à meada: tu inseristes "batata\n" mas pensas que só inseriste "batata" (repara no \n)

5- O que se passa é que o \n não vai ser apanhado pelo primeiro scanf que pára quando o vê

6- No entanto, o \n continua no buffer de entrada, e quando vem o segundo scanf, ele vai ao buffer de entrada buscar o que lá está. Como é um \n, o scanf "pensa" que o utilizador introduziu o que queria e que carregou em enter.

7- Como já não há mais scanfs, ele segue feliz e contente.

Ora bem, há várias formas de resolver este problema típico (já não me lembro qual a forma aconselhada pela wiki do P@P), mas uma das formas é colocar um espaço no segundo

scanf(" %c",&c); 

E assim já deverá funcionar. Se alguém se lembrar de alguma outra forma é dizer :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

usa o strlen, para strings

string[strlen(string)-1] = '\0'; 

substitui \n por \0

assim tiras o \n

e só com letra usas o que o jpaires disse

scanf(" %c",&c);

embora com a string tb funcione só com um carácter.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

int conta(char c, char *s);

int conta(char c, char *s){

int num_vezes=0;
int i=0;
while(*s!='\0'){
if(*s==c)
{
num_vezes++;
}
s++;
}
return num_vezes;
}

int main (){

char c;
char *s;

printf("\t\n Insira um caracter: \n");
scanf("%c",&c);

printf("\t\n Insira insira uma string: \n");
scanf("%s",s);

printf("res=%d",conta(c,s));
}

Problema resolvido... :)

Mais fácil :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora