Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

MarcosMelancia

Strings Emo

Recommended Posts

Olá a todos,

Estou fazendo um exercício em C com o seguinte escopo abaixo:

Desafio 00: Strings Emo Crie uma função que recebe uma string e transforma alguns dos caracteres
em maiúsculos e outros em minúsculos. Faça sorteios com a função rand() para gerar números aleatórios em C,que serão usados para escolher os índices dos caracteres que serão alterados.


De longe conssegui o seguinte pedaço de código:

 

Ps. Não consegui colocar a barra de rolagem, perdão!!

#include
#include
#include
#include

int main(){

char palavra[100];
int i, indice [100], indice_palavra[100];

printf("Digite uma palavra: ");
gets(palavra); setbuf(stdin, NULL);

srand(time(NULL));

for( i = 0; i <= strlen(palavra); i ++ ){

indice_palavra [i] = rand() % strlen(palavra);

}

for( i = 0; i <= strlen(palavra); i ++ ){

indice [i] = indice_palavra[i];
}


for( i = 0; i <= strlen(palavra); i ++ ){

if ( indice [i] == indice_palavra [i]){

strupr(palavra [i]); <== Linha onde ocorre o warning

}

}
printf("%s", palavra);

return 0;
}

Porém, o pequeno programa da erro, não na compilação do código mais sim no executável.

 

Imagino que seje no seguinte Warning, apontado na tabela acima:

 

Warning: assigment makes integer from pointer without a cast [enabled by defaut]...

 

 

Gostaria que me dessem uma luz para o problema acima. Desde já agradeço pela atenção.

 

Att,

 

MarcosMelancia

Subtreco do Subtroço Senior Management

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@@MarcosMelancia

 

Se você quer transforma alguns dos caracteres em maiúsculo... Uma das possibilidades seria...

 

Você pode usar o toupper(), que esta na biblioteca ctype.h, que transforma um caractere em maiúsculo ao contrario do strupr que transforma uma string.

 

Para saber qual caractere vai ficar maiúsculo, você coloca uma condição com uma probabilidade dele acontecer e iguala o i ao indice.

ex:

 

int random(int n)
{
  return rand() % n;
}


//...

n = strlen(palavra);

i=0;
while (i<n)
{
   if (random(2) == 0) //se a random(2) for igual a 0
   { 
	indice[i] = i; //indice[i] é igual a i;
   }
   i++;
}

//...

 

Depois é só fazer a comparação se i == indice.. ex:

 

for (i=0; i<n; i++)
{
   if (i == indice[i])
   {
       palavra[i] = toupper(palavra[i]); //caractere de palavra[i] ... para maiúsculo 
   }
}

 

Código:

 

 

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <time.h>

int random(int n)
{
	return rand() % n;
}

int main()
{
	char palavra[100];
	int indice[100], i,n;

	srand((unsigned)time(NULL));

	printf("Digite palavra: ");
	fgets(palavra,100,stdin);
	setbuf(stdin, NULL);

	n = strlen(palavra);

	
	i=0;
	while (i<n)
	{
		if (random(2) == 0)
		{
			indice[i] = i;
		}
		i++;
	}

	for (i=0; i<n; i++)
	{
	   if (i == indice[i])
	   {
	      palavra[i] = toupper(palavra[i]);
	   }
	}

	printf("\n> %s\n", palavra);

	return 0;
}

 

 

 

 

brHUE

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado BrHue!

 

A função Randon ficou bem interessante.

 

pesquisei um pouco e fiquei sabendo o quanto a função gets, em C, é bem perigosa. Vou adotar fgets ,para strings, nos próximos.

 

Att,

 

MarcosMelancia

Subtreco do subtroço senior management

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.