Ir ao conteúdo

Ajuda exercicio dev c tabela ascII


mbcs

Posts recomendados

Postado

Elabore um programa que leia uma string. O programa deve somar os códigos de cada

caractere da tabela ASCII e apresentar a soma da cadeia de caractere. O programa deve

percorrer a string usando ponteiros.

Aqui vai minha linha de codigo:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char str[20];
printf("Dig a string\n");
gets(str);
printf("%d\n",str);

system("pause");
}

Nesse codigo eu pego a string e imprimo com seus valores na tabela ascII. Mais n sei porque esse valor que estas sendo impresso é um lixo de memoria qualquer.No meu caso n importa a string q eu escrevo sempre imprime: 2687768. E ainda também n sei como pegar esses valores e somar ex: 2+6+8...

Se alguém puder ajudar agradeço. valeu!

Postado

ah valeu...

mas enquanto a segunda duvida..

como eu faco para somar esses valores gerados pela tabela asc?

Por exemplo para a palavra "bola" eu tenho 98 111 108 e 97 como eu faco para somar esses valores??:confused:

Postado
(...)

Para fazer a soma crie duas variaveis:

int inteiro, soma=0;

while(str[i] != '/0'){
inteiro = str[i];
soma+= inteiro;
i++;
}

Totalmente desnecessário a variável "inteiro"...

i=0;
while(str[i] != '/0')
{
soma+=str[i];
i++;
}

-

Postado

valeu galera mas mesmo assim n roda...

o debug acusa arquivo.exe parou de funcionar...

Segue codigo abaixo:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int i,soma=0;
char str[15];
printf("Dig a string\n");
gets(str);
for(i=0;i<15;i++)
{
printf("%d\n",str[i]);
}
i=0;
while(str[i] != '/0')
{
soma+=str[i];
i++;
}
printf("A soma é %d\n",soma);
system("pause");
}

Postado

Não é necessário o string.h, falta o 'return 0;', pessoas sensatas não usam gets,

se o seu exercício é pra usar ponteiro você não está fazendo isso.

Normalmente eu não faria isso mas vou escrever o seu programa, mas não

garanto que funciona porque eu não vou testar.


#include <stdio.h>
#define MAX 20
int
main (void)
{
char str[MAX];
char *sptr;
int soma = 0;

printf ("Digite sua string: ");
if (!fgets (str, MAX, stdin))
{
printf("##Erro ao ler string, programa encerrado\n");
return 0;
}

printf ("Valores ASCII da string:\n");
for (sptr = str; (*sptr) && (*sptr != '\n'); ++sptr)
{
printf("%c\n", *sptr);
soma += *sptr;
}

printf ("Soma dos valores: %c\n", soma);

return 0;
}

Postado

valeu pela ajuda caio o programa tá funcionando direito so tinha um errinho no codigo:

 printf ("Soma dos valores: %d\n", soma);

pois como tenho que imprimir como valores da tabela ascII preciso imprimir como inteiro.

N usei o comando fgets pois ainda estou no segundo periodo( Estrutura de Dados e Algoritmos I) e ainda nao aprendi sobre esse comando mas vou dar uma pesquisada sobre ele...

So queria que me explicasse o que esse for esta fazendo:

for (sptr = str; (*sptr) && (*sptr != '\n'); ++sptr)
{
printf("%c\n", *sptr);
soma += *sptr;
}

valeu a todos..

Postado
Totalmente desnecessário a variável "inteiro"...

i=0;
while(str[i] != '/0')
{
soma+=str[i];
i++;
}

-

Viajei mesmo..., não era necessário o uso da variável "inteiro", pois os caracteres da string são valores em inteiro na tabela ASCII.

Postado

Uhm, ahh agora que você disse era um errão aquilo, era pra ser um %d mesmo hahaha

Quanto aquele for ele é bem condensado, útiln mas é bem difícil pra quem não entende muito de C, vou quebrar cada statement e expression em uma linha

e explicar o que a linha faz ok?


for (
sptr = str; //o ponteiro sptr vai ser usado para percorrer a linha, em cada
//iteração ele guarda o endereço de um caractere da string
//no começo ele aponta para o primeiro caractere, nesse caso str que é
//um ponteiro para a str aponta para o primeiro caractere
(*sptr) && (*sptr != '\n'); //aqui o statement que controla a condição de
//parada, *sptr é um dereferenciação do ponteiro sptr, em outras palavras
//eu estou pegando o caractere para o qual sptr aponta, nesse caso a
//primeira parte testa se sptr aponta para '\0' (caractere nulo) que termina
//a string, é bem comum evitar comparar com '\0', NULL ou 0 e colocar
//só o statement já que quando a condição é igual a 0 o loop é interrompido,
//mas para um compilador decente isso não faz diferença...
// no segundo caso eu comparo com '\n' porque a fgets inclui o
//'enter' que você dá ao terminar de digitar a string no resultado final e
//acredito que o objetivo seria desconsiderar o 'enter', como curiosidade
//seria mais eficiente trocar a ordem dessa comparação, já que uma string
//digitada que não ocupasse até o limite do array sempre terminaria com
//'\n' e isso evitaria que a comparação com o caractere '\0' fosse feita
++sptr) //incrementa o ponteiro, simplesmente faz o ponteiro passar para
//o próximo caractere
{
printf("%c\n", *sptr); //imprime o caractere para o qual sptr aponta
soma += *sptr; //'soma' recebe o valor da soma de 'soma' e sptr
}

Arquivado

Este tópico foi arquivado e está fechado para 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...