Ir para conteúdo

POWERED BY:

Arquivado

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

Evandro Sousa

[Resolvido] Gerar arquivo texto com alfabeto dinamico

Recommended Posts

Pessoal, me desculpe mais uma vez estar aqui incomodando. Sei que esta parecendo que não estou me esforçando para fazer as meu trabalho, mas estou sim.

 

Bem, o que acontece agora é o seguinte, tenho que gerar um arquivo texto com caracteres alfabéticos obtidos randomicamente, depois ler e contabilizar o total de caracteres maiúsculos, minúsculos e dígitos e depois gerar um arquivo de saída com os caracteres alfabéticos convertidos (caracteres

maiúsculos para minúsculos e vice-versa).

 

Como eu disse estou iniciando em C e a facul esta me ferrando, não tive aulas de C, vim de outra facul para ca.

 

Gerar o arquivo texto eu já fiz:

 

int main(int argc, char *argv[])
{
 FILE *fp;
 fp = fopen ("README.txt", "w");
 if (fp == NULL) {
 	printf ("Houve um erro ao abrir o arquivo.\n");
 	return 1;
 }
fprintf(fp,"Teste");
 printf ("Arquivo README criado com sucesso.\n");
 
 fclose (fp);
}

para implementar o alfabeto eu imaginei algo como:

 static char alfabeto[] = "aqui vai o alfabeto inteiro";
 char alfarand[138],vaux;

e junto com um pedaço de um código que achei na net popular o text, mas essa parte do código esta zuada:

 

	while(alfarand[i] != '\0')
	{
 	x = (1 + rand() % 138);
 	for(j=0; j<=138; j++)
 	{
 	if(alfarand[j] != alfabeto[x] && alfarand[j] != ' ')
 	{
 	alfarand[i] = alfabeto[x];
 	j = 138;
 	fprintf(fp, "%s", alfarand[i]);
 	}
 	}
 	i++;
	}

Ele não executa nem esse while.

 

Novamente agradeço pela ajuda.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, oq te ajudará será a tabela ASCII de uma olhada para ver se entende oq eu qro dizer!

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quit, nao sei se eu entendi muito bem, mas acho q deu certo. é para fazer dinamicamente, por favor me corrija se eu tiver errado:

 

# include <stdio.h>
 
int main()
{
 int a;
 printf("Gerando Tabela ASCII, posi%coes de 32 a 126\n\n",135);
 a = 32;
 FILE *fp;
 fp = fopen ("README.txt", "w");
 if (fp == NULL) 
 {
 	printf ("Houve um erro ao abrir o arquivo.\n");
 	return 1;
 }

 do{
 	fprintf(fp,"\n",248,a,a);
 	a++;
 }while(a<=126);
 return 0;
}

Como eu faria para saber se eles são maisculos ou nao?? Tem algum comando ou melhor eu utilizar os codigos asc mesmo?

 

 

Bom, oq te ajudará será a tabela ASCII de uma olhada para ver se entende oq eu qro dizer!

 

[]s

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

hehe, como eu disse a tabela ASCII mata a charada: http://www.spectrum.eti.br/news/tabela_ascii_completa

 

veja q os caracteres maisculos vão de 65 até 90

e as minusculas de 97 até 122.

Se o numero gerado for esse você incrementa algum contador..

o msm para os sinais que também tem um intervalo;

soh uma dica de como fazer:

 

int num_gerado;
scanf ("%d",  &num_gerado);
printf("%c", num_gerado);

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quit, me desculpe pela encheção de saco, mas o seguinte, eu não estou conseguindo converter um char para int, como faço?

Eu entendi o seu recado, mas como não tenho experiencia com essa ferramenta, ai o negocio ta dificil.

 

Eu nao sei dizer se ele esta lendo uma linha inteira do meu arquivo, ou apenas caracteres.

Tentei utilizar um método chamado itoa, mas nao consegui, inclusive ele ta ai no código.

 

Veja como estou fazendo o código:

 

 while(!feof(fp))
 {
 	fgets(str,255,fp);
 	
 	i = atoi(str[j]);
 
 	//Tentei isso tb, e vi q com isso consigo pegar o valor hexa..
 	//i = (int)str[j];
 	//printf("%c",str[j]);
 	//printf("%d",i);	

 	if(i>=65 | i<=90)
 	{
 	mai = mai+1;
 	}
 	if(i>=97 | i<=122)
 	{
 	min = min+1;
 	}
 	if(i>=48 | i<=57)
 	{
 	dig = dig+1;
 	}*/
 	j++;
 }
 printf("\nTotal de Maiusculo.: %d", mai);
 printf("\nTotal de Minusculo.: %d", min);
 printf("\nTotal de Digito.: %d", dig);
 printf("\n");

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por favor, desconsidere o comentario acima, já encontrei o erro.

 

mas me diz uma coisa, pq nao consigo fazer:

 int *mai;
 mai = 0;
 
// Nao consigo fazer isso
 	if(i>=97 && i<=122)
 	{
 	min=1;
 	}

da um erro: invalid conversion from 'int' to 'int'

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que tu quer que o conteudo seja igual a zero, logo *mai=0, ou então mai = NULL(acho) se tu quer que ele comece da posição zero.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quit e Ripper, vlw pela força.

Finalmente consegui terminar uma parte.

Vou postar ai para quem quiser e assim que eu terminar a ultima parte posto tb.

 

Abraços

 


#include <stdlib.h>
#include <stdio.h>
#include <cstdlib>
#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
	FILE *fp;
	fp = fopen("arquivo.txt", "r");
	char str[255];
	int mai, min, dig, i, j;
	char val;
	mai = 0; 
	min = 0; 
	dig = 0;
	i = 0;
	j = 0;

	while(!feof(fp))
	{
		fgets(str,255,fp);
		int len = strlen(str);
		for(j=0;j<len;j++)
		{
			i = (int)str[j];
			if(i>=65 && i<=90)
			{
				mai += 1;
			}
			if(i>=97 && i<=122)
			{
				min += 1;
			}
			if(i>=48 && i<=57)
			{
				dig += 1;
			}
		}
	}
	printf("\nTotal de Maiusculo.: %d", mai);
	printf("\nTotal de Minusculo.: %d", min);
	printf("\nTotal de Digito.: %d", dig);
	printf("\n");
	system("PAUSE");
	return 0;
	system("PAUSE");
	return EXIT_SUCCESS;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aew, vlw, eu consegui agora terminar essa parte, 00:02 de uma sexta..

 

vejam a ultima parte do código, ele transforma minusculo em maiusculo.

 


#include <stdlib.h>
#include <stdio.h>
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
	FILE *fp;
	fp = fopen("arquivo.txt", "r");
	char str[255], strMaiuscula[255], strMinuscula[255];
	int i, j, len, auxMai, auxMin;
	i = 0;
	j = 0;
	auxMai = 0;
	auxMin = 0;
	
	while(!feof(fp))
	{
		fgets(str,255,fp);
		len = strlen(str);
		for(j=0;j<len;j++)
		{
			i = (int)str[j];
			if(i>=65 && i<=90)
			{
				printf("\n%c", tolower(str[j]));
                printf("\n");
			}
			if(i>=97 && i<=122)
			{
				
		    	printf("\n%c", toupper(str[j]));
                printf("\n");
			}
		}
	}
	system("PAUSE");
	return EXIT_SUCCESS;
}

Quit, nao reclame do system("PAUSE"), por favor.. rs..

Obrigado, problema resolvido.

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.