Ir ao conteúdo
  • Cadastre-se

Ajuda com o laço ''for''


johnny88

Posts recomendados

Pessoal, preciso de algumas explicações sobre um código.

#include <stdio.h>int main (){char string[100]; /* String, ate' 99 caracteres */int i, cont;printf("\n\nDigite uma frase: ");gets(string); /* Le a string */printf("\n\nFrase digitada:\n%s", string);cont = 0;for (i=0; string[i] != '\0'; i=i+1){if ( string[i] == 'c' ) /* Se for a letra 'c' */cont = cont +1; /* Incrementa o contador decaracteres */}printf("\nNumero de caracteres c = %d", cont);return(0);}

mais precisamente, essas linhas:

cont = 0;for (i=0; string[i] != '\0'; i=i+1){if ( string[i] == 'c' ) /* Se for a letra 'c' */cont = cont +1; /* Incrementa o contador decaracteres */

Alguém poderia me explicar melhor qual a lógica e o que faz essas linhas?

Não entendi muito bem ''string

Uma coisa que também ainda não entendi muito bem é o incremento e decremento...

 

Desde já, obrigado.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Boa noite.

o cont serve para contar quantos "c" foram digitados, basicamente.

cont = 0;for (i=0; string[i] != '\0'; i=i+1){if ( string[i] == 'c' ) /* Se for a letra 'c' */cont = cont +1; /* Incrementa o contador decaracteres */

Ele vai varrer a String, começando pela posição 0 até a posição nula (quando não encontrar caractere).

se nessa posição ele achar o "c", ele soma +1 na conta.

No final ele mostra quantas letras "c" a palavra possui.

 

Sugiro que troque o nome da variável "string" para "palavra" ou "frase". Senão vai confundir com o tipo "String".

Link para o comentário
Compartilhar em outros sites

Em C as string são cadeias de caracteres na forma de vetor de char.

Logo, como qualquer vetor, pode ter seus elementos referenciados pelo índice. Por exemplo: string[0] retorna o primeiro caractere, string[1] o segundo caractere e assim por diante.

Esse for é usado para percorrer todos os elementos da string, com o incremento a variável i.

Outra coisa importante a saber sobre strings, é que sempre devem terminar com o caractere '\0'. Veja que que loop usa isso como critério de parada em "string != '\0'".

Link para o comentário
Compartilhar em outros sites

Valeu galera estou começando a entender... Esse exercício ta sendo uma pedra no meu sapato, não consigo passar adiante.

 

Deixa eu ver se entendi. Vou colocar meus entendimentos entre parenteses.

#include <stdio.h>int main (){char string[100]; /* String, ate' 99 caracteres */int i, cont; (aqui criou duas variáveis "i" e "cont")printf("\n\nDigite uma frase: ");gets(string); /* Le a string */printf("\n\nFrase digitada:\n%s", string);cont = 0; (atribui o valor 0 a "cont")for (i=0; string[i] != '\0'; i=i+1) (aqui vai fazer o loop até achar a váriavel "i"=0? O "string[i] diferente de nulo e vai incrementar?){if ( string[i] == 'c' ) /* Se for a letra 'c' */ ( Se "string[i]" for igual a "c")cont = cont +1; /* Incrementa o contador decaracteres */}printf("\nNumero de caracteres c = %d", cont);return(0);}

Ainda não entendi muito bem essa linha:

for (i=0; string[i] != '\0'; i=i+1)

Não entendi "string" seria só pra procurar um caractere?

 

De qualquer maneira vou tentar passar adiante e deixar essa pra depois!

Obrigado pessoal.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

 

 

(aqui vai fazer o loop até achar a váriavel "i"=0? O "string diferente de nulo e vai incrementar?)

Não.

Suponha que a frase tenha 10 posições (0 até 9). A 11ª não tem nada, portanto é nula.

O "i" vai começar em "0" e vai até o "9" procurando.

Quando o "i" cair em 10 ele sai porque ele achou valor nulo ('\0').

 

O incremento não tem nada a ver com ser ou não ser nulo.

O incremento só vai acontecer lá no "if", quando achar a letra pedida.

 

Ou seja, o laço "for" vai correr o vetor string[] até achar o final.

O condicional "if" vai procurar a letra.

 

 

Você tem que fazer o teste de mesa.

Escreva uma frase qualquer. Conte quantas letras e espaços tem.

O valor que achar é a quantidade de vezes que o laço for vai passar. Só isso.

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

Em C uma string é um vetor de caracteres (você já sabe o que é um vetor?), no caso do seu programa existe um vetor de caracteres (char) com 100 posições (0 até 99) para conter caracteres, e convenientemente este vetor foi chamado "string". E strings sempre acabam em um caracter nulo que é representado pelo caractere especial '\0'.

 

Então se tivermos por exemplo a string:

"abc 123"

E a atribuirmos em uma string/vetor de caracteres, cada caractere será armazenado sequencialmente em uma posição do vetor, e no fim é acrescentado o caractere nulo '\0' que indica que a string termina ali (e que o que quer que esteja armazenado nas demais posições do vetor é irrelevante). Então teremos:

string[0] == 'a'string[1] == 'b'string[2] == 'c'string[3] == ' 'string[4] == '1'string[5] == '2'string[6] == '3'string[7] == '\0'

Note que espaço também é um caractere, assim como o caractere nova linha '\n'. Note também que um vetor de chars de 100 posições só pode armazenar uma string de no máximo 99 caracteres não nulos, pois nesse caso a última posição deverá armazenar o caractere nulo.

 

 

 

Então vejamos o for do seu código:

for (i=0; string[i] != '\0'; i=i+1)

O que ele está fazendo ali é testar as posições do vetor de caracteres, percorrendo o vetor a partir de sua posição inicial (0), em sequência de 1 em 1, até encontrar a posição que contém o caractere nulo, ou seja, onde a string acaba.

Para isso ele inicializa um contador "i" com valor zero e vai incrementando seu valor em 1 unidade (= soma 1) ao fim de cada ciclo. Então "i" vai contando 0, 1, 2, 3, 4, etc...

E este número é usado para indicar a posição de cada caractere (string[0], string[1], string[2], etc...) que vai ser comparado ao caractere nulo, e o ciclo continua rodando enquanto o caractere for diferente de '\0', ou seja enquanto não chegar ao fim da string.

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

Muito obrigado Math e Ismick, agora entendi melhor.

Eu sabia sobre as posições mas tava um pouco perdido. 

 

Tem um exercicio similar que pede para substituir as letras ''c'' encontradas com ''b''. Como seria esse código? É o mesmo esquema, conta quantas letras ''c'' tem e depois para para substitui-las por b

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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