Odhalení diakritiky – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Odhalení diakritiky – C / C++ – Fórum – Programujte.comOdhalení diakritiky – C / C++ – Fórum – Programujte.com

 

gruv0
Duch
28. 5. 2013   #1
-
0
-

Zdravím všechny,

možná je to stupidní, ale já si s tím nevím rady. Potřebuju, aby když někdo napíše do vstupu větu s diakritikou, vyhodil se messagebox s upozorněním. Nevím jak do kódu zapsat něco ve smyslu "pokud věta obsahuje á,é,ě,č...."

Nechci nějaké rozsáhlé a složité syntaxe na odstranění diakritiky, protože jim stejně nerozumím. Tohle mi přijde jako ideální řešení, jen nevím jak to zapsat.

Díky všem za případnou radu 

Nahlásit jako SPAM
IP: 213.226.248.–
vitamin+8
Grafoman
28. 5. 2013   #2
-
0
-

V akom formate mas text?

Ak v utf8 tak mozes pouzit kniznicu utf8-cpp a testovat ci sa znaky zmestia do char:

#include <iostram>
#include <string>
#include "utf8.h"

int main(){
	std::string str(u8"abcdefáéíďťňľ");
	
	auto begin = str.begin();
	auto end = str.end();
	while(begin != end){
		uint32_t c = utf8::next(begin, end);
		
		std::cout << c << "   : ";
		if(c < 128)std::cout << (char)c;
		else std::cout << "chyba";
		
		std::cout << "\n";
	}
}

Ak v utf16, tak ta kniznica ma prevod z utf16 na utf8, pripadne pouzi nieco ine.

Nahlásit jako SPAM
IP: 95.105.152.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
ingiraxo+15
Grafoman
28. 5. 2013   #3
-
0
-

nebo "klasickej" zápis přes pole znak po znaku, pokud nezmáš moc iterátory.. takováto funkce pro test diakritiky

bool textDiakritiky(char* text, int length)
{
    for (int i = 0; i < length; ++i)
    {
        if (text[i] > 127)
            return true;
    }
    return false;
}
Nahlásit jako SPAM
IP: 93.90.162.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
vitamin+8
Grafoman
28. 5. 2013   #4
-
0
-

#3 ingiraxo

Problem je v tom ze utf8 a utf16 mozu mat variabilnu dlzku. Ak bude chciet len zistit ci text obsahuje diakritiku tak mu staci tvoj sposob ale ak bude chciet neskor odstranit (nahradit znaky z diakritikov za tie bez tak uz to moze robit problem). S utf16 pojde nahradzanie jednoduhsie lebo vsetky znaky s diakritikov v cz-sk jazyku vyžaduju len 1 znak (2B).

Ak pouziva napr windows-1250 kodovanie tak to bude mat este vtipnejsie :)

Nahlásit jako SPAM
IP: 95.105.152.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
ingiraxo+15
Grafoman
28. 5. 2013   #5
-
0
-

#4 vitamin
no jo, jsem úplně zapoměl ze utf8 mají 2byte, no tak opravim.. původní text překonvertovat na wchar_t

wchar_t* toCharArrayW(const char* text)
{
    size_t size = strlen(text) + 1;
    wchar_t* arr = new wchar_t[size];
    mbstowcs(arr, text, size);
    return arr;
}
Nahlásit jako SPAM
IP: 93.90.162.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
vitamin+8
Grafoman
28. 5. 2013   #6
-
0
-

#5 ingiraxo
utf-8 znak ma 1B - 4B  

utf-16 znak ma 2B - 4B   

Kedze maju variabilnu dlzku tak konverzia nie je uplne jednoducha.

utf-32 znak ma 4B     //ma pevnu sirku

Nahlásit jako SPAM
IP: 95.105.152.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
gruv0
Duch
28. 5. 2013   #7
-
0
-

Vůbec mě nenapadlo použít asci tabulku, trošku jsem si to upravil a použil if (text[i] > 127), můj účel to splňuje a upřímně z toho druhého kódu jsem nepochopil nic 

Nahlásit jako SPAM
IP: 213.226.248.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 87 hostů

Podobná vlákna

Odhalení chyby — založil MiCizek

Odstranění diakritiky — založil gengar

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý