Ir ao conteúdo

Posts recomendados

Postado

boa tarde gente, estou com um probleminha aqui num codigo que estou codando, o que aconte é o seguinte, o ç, caracteres com acento e outros caracteres especiais ocupam dois bytes em uma string, quando eu tento trabalhar com a posição onde esta o ç... na string me retorna coisas estranhas e não o ç... exemplo:

string str = "açucar";
cout << str[0] << endl; //saida a
cout << str[1] << endl; //erro
cout << str[2] << endl; //erro
cout << str[3] << endl; //saida u

decidi colocar o byte 1 e  2 dentro de um arquivo de texto e depois ler o conteudo do arquivo, o resultado foi o ç codigo:

string str = "açucar"; 
	fstream arqq;
	arqq.open("temp",ios::out);
	arqq << str[1] << str[2] ;
	arqq.close();
	string caracter;
	arqq.open("temp",ios::in);
		if(arqq.is_open()){		
			string linha;
			caracter = "";//zera global
			while(getline(arqq,linha)){
				//cout << linha << endl;
				caracter+=linha;
				}
				arqq.close();
	}
	cout << ">" << caracter << "<" << endl;

dai coloquei dentro do arquivo somente o byte 1, o mesmo codigo de cima só mudei a linha arqq << str[1] << str[2]; para arqq << str[1]; , com isso feito o resultado não é o ç e um interrogação bugado, mas dentro do arquivo abrindo o arquivo "temp" pelo gedit ele mostra \C3 e mostra um erro de codificação dai eu mudo para Ocidental ISO 8859-1 e me mostra isso à quando abro o arquivo com o geany me mostra à isso logo de cara nem pede pra mudar codificação e quando eu faço esse procedimento com o byte 2 acontece o mesmo mas com os caracteres \A7 §

o que eu quero e que quando inserir o byte 1 no arquivo insira \C3 e quando ler o arquivo não mostre um interrogação bugadom, quero que mostre \C3, com isso poderei fazer uma comparação assim ó

if(caracter=="\C3"){
	cout << "sucesso" << endl;
}

mas ta difícil de fazer isso, é como se o if não conseguisse interpretar \C3 ou o fstream nao consegue ler somente \C3, alguem consegue me ajudar com isso?

  • Obrigado 1
Postado

@vangodp

SO: Debian 9 stretch

IDE: Geany

 

fiz o que você disse mudei a codificação do terminal para 1252, 

não mostra mais o interrogação bugado, mostra o à no primeiro byte do ç e no segundo mostra §

o problema é que o ç ocupa duas posições em uma string e esse esta sendo o problema porque preciso passar caracter por caracter de uma string e manipular esse caracter, mas não funciona porque ao contar quantos caracter há na string mostra 1 a mais q no caso é o ç que ocupa dois espaços fiz testes sem ç e o tamanho da string é real, ou seja o problema esta em armazenar ç... em uma string o ç ocupa duas posições na string a posição 1 Ã e a posição 2 

//DESSA MANEIRA O Ç É MOSTRADO PERFEITAMENTE
string str = "açucar";
int nc = strlen(str.c_str());
cout << nc;
for(int a=0;a<nc;a++){
    cout << str[a];
}

//DESSA MANEIRA MOSTRA Ã E §
string str = "açucar";
int nc = strlen(str.c_str());
cout << nc;
for(int a=0;a<nc;a++){
    cout << str[a] << endl;//apenas acrescentei o endl
}

//note que no o tamanho da string é 7 pois o ç ocupa dois espaços na string
//se escrever acucar o tamanho passa a ser 6

 

adicionado 31 minutos depois

acabei de resolver, o problema é que o geany(ide) salva meu arquivo com codificação utf-8 eu mudei a codificação do documento pelo geany para windows 1252 ocidental, e esta funcionando perfeitamente, o ç esta ocupando apenas um espaço na string, valeu pela ajuda @vangodp

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!