Ir ao conteúdo
  • Cadastre-se

C++ imprimir resultado em arquivo txt


Posts recomendados

Olá! Estou com problema em um código. Preciso que o programa leia: o nome do arquivo a ser aberto e o conteúdo que está dentro. Em seguida, uma função será chamada para que inverta as letras de cada palavra nesse arquivo, basicamente é a cifra de atbash.
 

exemplo:


Entrada: 
"ESSE CODIGO
NAO VAI
DE JEITO NENHUM"

 

Saída: a saída terá que ser escrita num outro arquivo.txt 
"VHHV XLWRTL
MZL EZR
WV QVRGL MVMSFN"

O problema em questão é que não consigo escrever o resultado num outro arquivo, muito menos passar os dados do primeiro arquivo a ser lido para a função.

 

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

string atbash (string conteudo){
	int tamanho = conteudo.size();
	string crypt;
	
	crypt = conteudo; 
	
	for (int i = 0; i < tamanho; i++){
		if('A'<=conteudo[i] and conteudo[i]<='Z'){
		crypt[i] = 'A' + 'Z' - conteudo[i];
		}
	}
	return crypt;
}

int main(){
	string nome, crypt;
	
	cin >> nome;
	ifstream arq(nome);			//nome do arquivo que conterá a frase original
	
	ofstream arq2("cifrado.txt"); 		//arquivo cuja resposta deverá ser escrita
	
	crypt = atbash(conteudo);		//nessa parte do *conteudo* preciso que leia do arq(nome) Como faço isso?

	cout << crypt;
	
	arq.close();
	
return 0;
}



 

  • Curtir 1
Link para o post
Compartilhar em outros sites

Você precisa ler do arquivo de entrada. Gravar no arquivo de saída. Pode usar um iterator ou << e >> ou mesmo fread() e fwrite(). Algum comando. Não basta apenas declarar o arquivo

  • Curtir 1
Link para o post
Compartilhar em outros sites
2 horas atrás, Helena Figma disse:

Então, eu estava fazendo isso mas como deu muito erro resolvi tirar desse código que postei

 

mas esse código não tenta ler nem gravar. Então por certo não vai ler nem gravar. Como eu disse, está usando streams então pode usar os operadores normais, << e >> ou read/write ou iteradores mesmo.

  • Curtir 2
Link para o post
Compartilhar em outros sites

Sem dizer qual o "muito erro" não dá pra te ajudar...

adicionado 8 minutos depois

Mas entenda que só precisa copiar. É um filtro.

 

Exemplo
 

imagine um programa pgm.exe que o cara pode usar assim

pgm um.txt dois.txt [1] ou

pgm um.txt [2] ou

pgm [3]

Definido assim:

  • [1] copia um.txt para dois.txt 
  • [2] copia um.txt para saida.txt
  • [3] sem parâmetros: copia de entrada.txt para saida.txt no diretório corrente

Ou seja, o arquivo padrão de entrada é entrada.txt e o de saída é saida.txt.

 

Um programa desses poderia ser

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
string atbash(string);

int main(int argc, char** argv)
{
	string arquivoEntrada = "entrada.txt";
	string arquivoSaida = "saida.txt";
	if (argc > 1)
	{   // o cara pode usar "programa [entrada [saida]]"
		arquivoEntrada = argv[1];
		if (argc > 2) arquivoSaida = argv[2];
	};	// if()

	ifstream entrada{ arquivoEntrada };
	ofstream saida{ arquivoSaida };
	string conteudo = "";
	while (getline(entrada, conteudo))
	{
		int tamanho = conteudo.size();
		for (int i = 0; i < tamanho; i++)
			if ('A' <= conteudo[i] and conteudo[i] <= 'Z')
				conteudo[i] = 'A' + 'Z' - conteudo[i];
		saida << conteudo << endl;
	};	// while()
	return 0;
};	// main()

// fim do texto

Assim já serviria

 

  • Obrigado 1
Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora


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

GRÁTIS: ebook Redes Wi-Fi

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!