Jump to content
Inacabado

Programa para converter caracteres em Maiusculas e achar sináis de pontuação na string inserida.

Recommended Posts

Inacabado

Muito boa noite ao forum.

Escrevi um programa de um livro que supostamente deveria converter todos os caracteres inseridos na string em maiusculas e contar igualmente todos os sináis de pontuação inseridos.

O código é simples de entender e não me acusa qualquer erro de compilação mas estranhamente não faz o pretendido. Ou melhor, faz, mas só em parte: converte todos os caracteres em maiusculas, mas estranhamente aponta todos os caracteres inseridos como caracteres de pontuação.

Eis o código:

/*mod_str.c --modifies a string*/
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define LIMIT 81
void toUpper(char*);
int punctCount(const char*);

int main(void)
{
	char line[LIMIT];	
	char *find;

	puts("Please enter a line:");
	fgets(line,LIMIT,stdin);
	find=strchr(line,'\n');		//look for a newline
	if(find)			//if the address is not NULL,
		*find='\0';		//place a null character there
	toUpper(line);
	puts(line);
	printf("That line has %d punctuation characters\n",
		punctCount(line));
	puts("Bye.");
	
return 0;
}
	
void toUpper(char *str)
{
	while(*str)
	{
		*str=toupper(*str);
		*str++;
	}
}
int punctCount(const char *str)
{
	int count=0;
	while(*str)
	{
		if (ispunct(*str));
			count++;
		str++;
	}
return count;	
}

Se eu inserir:

Me? You talkin' to me? Get outta here!

converte em :

ME? YOU TALKIN' TO ME? GET OUTTA HERE!

That line has 38 punctuation characters

Comportamento estranho e não estou a ver o erro de semântica.

Agradecia muito uma ajuda do forum.

Abraço
Bye.

Share this post


Link to post
Share on other sites
HappyHippyHippo

dois erros :

- o incremento do ciclo existente na função toUpper

- a instrução executada na condição if do ciclo da função punctCount

olha bem para esta última ! qual é a instrução que está a ser executada caso a condição do if for verdadeira ?

  • Vote 1

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Inacabado

yappp... Aquele ';' está ali a mais na função punctCount()! Obrigado HHH.

Mas continuo sem dar resposta à pergunta que fizes-te...

8 horas atrás, HappyHippyHippo disse:

 

olha bem para esta última ! qual é a instrução que está a ser executada caso a condição do if for verdadeira ?

Porque é que o programa estava a contar todos os caracteres como pontuação e em que é que aquele ';' ali contribuia para isso???

Vou pensar nisso e já posto...

Share this post


Link to post
Share on other sites
HappyHippyHippo

porque isto :

if (ispunct(*str));
	count++;

é o mesmo que isto :

if (ispunct(*str))
{
	/* void */;
}
count++;

 


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Inacabado
33 minutos atrás, HappyHippyHippo disse:

porque isto :


if (ispunct(*str));
	count++;

é o mesmo que isto :


if (ispunct(*str))
{
	/* void */;
}
count++;

 

Que é o mesmo que isto (nesta função especifica):

int punctCount(const char *str)
{
	int count=0;
	while(*str)
	{
		count++;
		str++;
	}
return count;	
}

Afinal o count++ não está a condição de nada logo o if (isPunct(*str)), pode-se retirar. Acredita estava a tomar o pequeno almoço e ia postar porque tinha compreendido entreteanto a tua pergunta!

 

 

Edited by Inacabado

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.