Como comparar Character em C? [RESOLVIDO]

1. Como comparar Character em C? [RESOLVIDO]

Apprentice X
ApprenticeX

(usa Slackware)

Enviado em 14/11/2021 - 14:28h

Boa dia a todos,

A pergunta é super tola, até porque eu achava que sabia fazer isso! Mas não acho minhas anotações e não estou conseguindo fazer!
Quero comparar 1 caracter char e wchar.

Meu Objetivo é aprender e entender como comparar 1 Caracter em C. Pois quero comparar usando char, e depois comparar acentos usando wchar
Se existe alguma forma melhor ou mais correta, gostaria também de saber!

Não quero fazer comparação decimal!
Não quero usar funções prontas!
#include <stdio.h>
#include <stddef.h>

int main() {
char Char = 'a';
wchar_t wChar = L'á'; // wchar vou usar caracter acentuado!

/////////////////////////////////////////
// NÃO QUERO COMPARAR ASSIM!
/////////////////////////////////////////
if(Char == 'a')
puts("Test1");

if(wChar == L'á')
puts("Test2");


/////////////////////////////////////////
// Alguma forma desses abaixo funcionar?
/////////////////////////////////////////
if(Char == "a") // error: comparison between pointer and integer
puts("Test3");

if(Char[0] == "a") //error: subscripted value is neither array nor pointer nor vector
puts("Test4");

if(wChar == "á") // error: comparison between pointer and integer
puts("Test5");

if(wChar == L"á") // error: comparison between pointer and integer
puts("Test6");
}



  


2. MELHOR RESPOSTA

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 15/11/2021 - 20:26h



if(Char == "a") // error: comparison between pointer and integer
puts("Test3");

if(Char[0] == "a") //error: subscripted value is neither array nor pointer nor vector
puts("Test4");

if(wChar == "á") // error: comparison between pointer and integer
puts("Test5");

if(wChar == L"á") // error: comparison between pointer and integer
puts("Test6");

Acontece que nesses if's, você está tentando comparar ponteiros com o caractere (char ou wchat_t).
Olha um exemplo de como funciona:
Char == "a"[0]
Observe o seguinte, Char é apenas um único valor. Já o "a" são dois valores na string, é o caractere 'a' e o '\0' (terminador nulo.
Então, o Char == "a"[0] é o mesmo que pegar o Char e comparar com a posição 0 da string "a\0".
Se você colocar algo como Char == "a"[1] estará comparando o Char com o terminador nulo da string "a", pois é ele que está na posição 1
Se você quiser transcender a lógica e usar o seguinte: Char == "a"[11] estará comparando o Char com a posição 11 além do tamanho da string "a", e assim, acessará áreas de memórias não definidas por você, o que pode ou não levar a erros, isso é contar muito com a sorte rsrsrs

Já o código:
   if(Char[0] == "a") //error: subscripted value is neither array nor pointer nor vector
puts("Test4");

Você está fazendo o inverso do que falei acima. Char não é ponteiro e por isso não tem como acessar conteúdo dele fazendo algo como Char[0], por isso o compilador deu erro.
Se fosse apenas Char == "a"[0], o compilador não avisaria de erro já que o "a" é uma string, um vetor uma área de memória com sequência de dados.
Sendo que o "a" nada mais é que "a\0". Lembre-se que em C toda string constante termina em '\0' (terminador nulo).

3. Re: Como comparar Character em C? [RESOLVIDO]

Apprentice X
ApprenticeX

(usa Slackware)

Enviado em 15/11/2021 - 21:58h

SamL escreveu:
Acontece que nesses if's, você está tentando comparar ponteiros com o caractere (char ou wchat_t).
Olha um exemplo de como funciona:
Char == "a"[0]
Observe o seguinte, Char é apenas um único valor. Já o "a" são dois valores na string, é o caractere 'a' e o '\0' (terminador nulo.
Então, o Char == "a"[0] é o mesmo que pegar o Char e comparar com a posição 0 da string "a\0".
Se você colocar algo como Char == "a"[1] estará comparando o Char com o terminador nulo da string "a", pois é ele que está na posição 1
Se você quiser transcender a lógica e usar o seguinte: Char == "a"[11] estará comparando o Char com a posição 11 além do tamanho da string "a", e assim, acessará áreas de memórias não definidas por você, o que pode ou não levar a erros, isso é contar muito com a sorte rsrsrs

Já o código:
   if(Char[0] == "a") //error: subscripted value is neither array nor pointer nor vector
puts("Test4");

Você está fazendo o inverso do que falei acima. Char não é ponteiro e por isso não tem como acessar conteúdo dele fazendo algo como Char[0], por isso o compilador deu erro.
Se fosse apenas Char == "a"[0], o compilador não avisaria de erro já que o "a" é uma string, um vetor uma área de memória com sequência de dados.
Sendo que o "a" nada mais é que "a\0". Lembre-se que em C toda string constante termina em '\0' (terminador nulo).

Puxa SamL, nunca mesmo imaginaria uma resposta assim!
De fato NUNCA em nenhum lugar vi algo desse tipo como você informa: "a"[0]

Mas o caso é que se aprende! Sua resposta realmente funciona! E eu desconhecia completamente esse recurso!
E gostei ainda mais, porque abre novas possibilidades! Obrigado!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts