Ir ao conteúdo
  • Cadastre-se

C Testar se uma string começa com a letra b


Maxavam

Posts recomendados

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

int main ()
{
	char strings [5][30];
	int count;
	for (count=0;count<5;count++)
        {
        	printf ("\nDigite uma string: ");
        	scanf ("%s",strings[count]);
        }
        
        
        for (count=0;count<5;count++)
        {
        if (strings[0]=="b")
        
        {
         printf ("\n\ As strings digitadas que começam com a letra b são:\n");
         printf ("%s\n",strings[count]);
        }
	
	    else {
	        
	        printf ("\n\ Nenhuma das  strings digitadas  começam com a letra b \n");
	     
	         }
	
                
        return(0);
        }
}

Preciso fazer um programa que testa se uma determinada string de no maximo 30 caracteres ( não consegui pensar essa parte)  começa com a letra b .... não está funcionando....

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Maxavam

12 minutos atrás, Maxavam disse:

string de no maximo 30 caracteres

Deixe espaço para o caractere nulo:

char str[5][31];

Aliás:

14 minutos atrás, Maxavam disse:

testa se uma determinada string

você tem que avaliar uma determinada string ou 5 strings?

 

12 minutos atrás, Maxavam disse:

começa com a letra b

Basta comparar:

if(str[indice][0] == 'b' || str[indice][0] == 'B')
    puts("Comeca com a letra b");

`indice` depende de qual string se está avaliando.

Um exemplo:

#include <stdio.h>

int main()
{
    char str[5][31] = 
    {
        "alface",
        "batata",
        "estojo",
        "relogio",
        "bola"
    };
    
    puts("As seguintes palavras comecam com b:");
    for(int i = 0; i < 5; i++)
        if(str[i][0] == 'b' || str[i][0] == 'B')
            puts(str[i]);

    return 0;
}

Na saída:

As seguintes palavras comecam com b:
batata
bola
  • Curtir 2
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Maxavam Poderia explicar, mas vou deixar um exemplo auto explicativo

#include <stdio.h>


int main(void)
{
    int contador;
    char frase[60];
    /* Pega a string */
    printf("Digite uma frase:");
    fgets(frase, 60, stdin);
    
    /* Conta o tamanho da string */
    /* Poderia usar strlen() da biblioteca string.h para verificar o tamanho da string */
    for (contador = 0; frase[contador] && contador < 60; contador++);
    
    /* Retira o NewLine (enter) da string */
    contador--;
    frase[contador] = '\0';
    /* Checa se a frase e maior que 30 */
    if (contador <= 30) {
        /* Checa se a string começa com 'b' */
        /* Poderia usar toupper da biblioteca ctype.h para simplificar o processo */
        if (frase[0] == 'b' || frase[0] == 'B') {
            printf("A frase comeca com B e esta entre a faixa de 30 caracteres\n");
        } else {
            printf("A frase não comeca com B mas esta na faixa de 30 caracteres\n");
        }
    /* Se for maior que 30 caracteres */
    } else {
        printf("A frase e invalida\n");
    }
    
    puts("Pressione enter para finalizar");
    getchar();
    return(0);
}

 

  • Curtir 3
Link para o comentário
Compartilhar em outros sites

@Maxavam Disse que a dificuldade era a validação...

31 minutos atrás, Maxavam disse:

Preciso fazer um programa que testa se uma determinada string de no maximo 30 caracteres ( não consegui pensar essa parte)  começa com a letra b .... não está funcionando....

Para ler uma string use scanf(), fgets() ou qualquer outra função. Você já está usando em seu programa.

Mostrei como pode verificar se a string começa com 'b', e não é nada difícil, ao menos leu?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Maxavam

10 minutos atrás, Maxavam disse:

Lucca, estou tentado fazer esse programa a varias horas, sou bem iniciante no assunto e tenho muita dificuldade.....

Que espera que eu faça com essa informação? 🤪

Iniciante até eu sou, mas enfim...

Tem dúvidas? Questionamentos?

Afinal, te mostrei como fazer o que não estava conseguindo, e o colega @kgin te mostrou um exemplo completo, se tem dúvidas não hesite em perguntar, o fórum é pra isso :)

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Deu uma melhorada, agora só falta garantir que a string tem no maximo 30 caracteres, muito obrigado a todos pela ajuda

 

#include <stdio.h>

int main()
{
    char str[5][31];
    int i;
    for (i=0;i<5;i++)
    {
        printf("digite a string %d:  ", i+1);
        scanf("%s",str[i]);
    }
    
    puts("As seguintes strings comecam com b:");
    for(int i = 0; i < 5; i++)
        if(str[i][0] == 'b' || str[i][0] == 'B')
            puts(str[i]);

    return 0;
}

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

@Maxavam

1 hora atrás, Maxavam disse:

só falta garantir que a string tem no maximo 30 caracteres

Com scanf(), basta determinar a quantidade de caracteres a serem lidos e armazenados na string depois do % no especificador:

scanf("%30s%*c", str[i]);

o %*c é para ler e descartar o caractere '\n' digitado ao teclar Enter.

Com fgets(), a quantidade de caracteres a serem armazenados (contando com o caractere nulo) deve ser o segundo argumento passado na chamada da função, como no exemplo de @kgin.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Outra forma de resolver seria armazenar no vetor só as strings que começam com b. Aí o teste "string = b" seria no primeiro loop e no caso verdadeiro faria o incremento de uma variável (iniciada com zero) para ser usada de índice. Assim essa variável pode ser usada para saber a quantidade de strings que começam com b.

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

 

Porque deu errado?  Como identificar se uma string começa por b ?
 

Você declarou isso:
 

    char strings [5][30];


E tentou isso:

 

    if (strings[0]=="b")
      // ...

 

Sua escolha de chamar o vetor de strings não ajudou muito: só trouxe mais ambiguidade ao caso.

 

Em C uma string é um vetor de char, e para ser bem formado precisa ter um ZERO no fim. strings em C são sequências de char terminadas por 0. 

 

Exemplo:

 

     char* exemplo = "b";

 

Escrevendo assim o compilador entende que vai ser uma string e coloca um zero depois do valor. Essa string vai ocupar dois bytes, um com 'b' e outro com 0.

 

No seu programa strings é o que?

 

É char[5][30], foi o que você declarou. Um vetor de 5 vetores de 30 char. Não é uma string, no singular, nem strings, no plural, a menos que você construa assim, colocando um zero ao final de cada um dos 5 vetores de 30 letrinhas.


No seu programa strings[0] é o que?

 

É char[30], foi o que você declarou. Um vetor de 30 char. Também não é uma string. 

 

string[0] é char[30] então você pode colocar algo lá, escrevendo

 

	string[0][0]= 'a';
	string[0][1]= '0';
	string[0][29]= 'x';

 

E está ok assim. Agora string[0] é uma string e vale "a". Note que as aspas indicam que é uma string e tem um zero no fim, depois do 'a'. E cada posição do vetor string[0] é o que? É char. São 150 char no total. E vão de strings[0][0] até strings[4][29]. 150. Todos char. O 'x' no exemplo aí está na última posição do primeiro vetor. Não faz parte da string porque ela termina no zero que está na posição 1. Mas o programa alocou os 150 bytes e você pode escrever o que quiser lá.

 

Uma string não pode ser comparada no atacado, como unidade. Você não pode escrever strings[0] == "coisa" por exemplo. Precisa usar uma função para isso, ou comparar letra a letra.

 

Entenda esse programa:

 

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

int main(void)
{   char* exemplo = "b";

    printf("exemplo: \"%s\"\n", exemplo);

    printf("exemplo: %c %d\n", exemplo[0], exemplo[1] );

    printf("usando base e deslocamento: %c %d\n", *(exemplo + 0), *(exemplo + 1) );

    char strings [5][30];

    strings[0][0]= 'a';
    strings[0][1]= '0';
    strings[0][29]= 'x';

    char* uma_string = "uma string e uma coisa";

    strcpy( strings[3], uma_string ); // essa funcao de string.h copia uma strig para outra
    printf("A quarta string: \"%s\"\n", strings[3] );

    printf("Comparando com \"uma string\": " );

    if ( strcmp(strings[3], "uma string") == 0) // strcmp() compara duas strings e retorna zero se forem iguais
        printf("iguais\n");
    else
        printf("diferentes\n");
    printf("Comparando com \"uma string e uma coisa\": " );

    if ( strcmp(strings[3], "uma string e uma coisa") == 0)
        printf("iguais\n");
    else
        printf("diferentes\n");    
}

 

 

Que mostra

 

exemplo: "b"
exemplo: b 0
usando base e deslocamento: b 0
A quarta string: "uma string e uma coisa"
Comparando com "uma string": diferentes
Comparando com "uma string e uma coisa": iguais

 

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!