Ir ao conteúdo

Posts recomendados

Postado
#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
Postado

@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
Postado

@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
Postado

@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
Postado

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

  • Curtir 1
Postado

@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
Postado

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
Postado

@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
Postado

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
Postado

 

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

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!