Strona 1 z 1
					
				[c++] porownywanie polskich znakow
				: 03 lutego 2008, 21:34
				autor: Chodak
				Witam. Sprawa wydaje sie banalna ale probuje juz od dluzszego czasu i nic nie wymyslilem, problem jest nastepujacy: polskie znaki w tablicy sa przechowywane jako dwie wartosci a nie jedna (pewnie przez mala pojemnosc char), a co za tym idzie nie mozna ich normalnie porownac. Na przyklad - aby zamienic 'ą' na 'a' napisalbym:
Kod: Zaznacz cały
std::string str="ącą";
 
 if(str[0] == 'ą')
 str[0] = 'a';
 
 std::cout << str <<std::endl;
Taki zapis nic nie daje, rzutowania tez nie pomagaja... ma ktos pomysl?
Pozdrawiam
Chodak
 
			 
			
					
				
				: 03 lutego 2008, 22:54
				autor: salmon
				Nie wiem czy to pomoże, ale poczytaj o typach wchar_t i wstring i o bibliotece locale z biblioteki standardowej c++.
			 
			
					
				
				: 04 lutego 2008, 02:24
				autor: hot_stuff
				Skoro polskie litery sa przechowywane w tablicy jako dwa znaki to musisz hmmm...:
1. Dowiedziec sie jak te polskie litery sa rozbijane -> dzieki temu zapewne bedziesz w stanie zidentyfikowac w ktorym miejscu w tablicy wystepuje polska litera i wtedy juz powinienes w miare latwo moc porownac te dwie komorki tablicy z polska litera<troche zabawy mimo wszystko bedzie a sposobow realizacji tego tez jest dosyc sporo>
LUB:
2. Bedziesz musial wyszykiwac w stringu po kolei podciagow bedacych polskimi znakami - chodzi tu o to aby wyszukiwac w stringu kolejnych polskich znakow<cos na wzor wyszukiwania w tekscie "ala ma kota" slowa "kota"> Mozliwe, ze takie operacje sa zaimplementowane w STL'u. Mozliwe, ze przydatna okaze sie metoda find() z biblioteki string ;-) 
Pozdrawiam.
			 
			
					
				
				: 04 lutego 2008, 10:37
				autor: mikolajs
				Znaki w większości systemów linuxowych są kodowane w utf8. I kompilator c++ sobie z tym radzi.
Poszukiwany przez Ciebie znak jest zakodowany na dwóch bajtach pierwszy to prawdopodobnie 11000000. Spróbuj sobie wydrukować zapis zamieniony na kolejne byte, np coś takiego 
Kod: Zaznacz cały
 
#include <string>
#include <iostream>
int main(){
   std::string napis("ą");
   int n = (int)napis.length();
   for (int i = 0; i < n; i++) std::cout  << (int)napis[i] << "\t";
   std::cout << std::endl ;
   char a;
   std::cin >> a;
 return 0;   
}
Jak będziesz znać bajty na których są zakodowane litery polskie to możesz robić podwójny warunek sprawdzając po kolei dwa bajty
 
			 
			
					
				
				: 04 lutego 2008, 12:03
				autor: Chodak
				Rozwazalem sposob ktory zaproponowal hot_stuff jednak wydawal mi sie zbyt 'chaupniczy', rozwiazaniem ktorego szukalem okazal sie typ wstring kodujacy w utf16, dziala np nastepujacy zapis:
Kod: Zaznacz cały
#include <iostream>
 int main()
 {
 std::wstring str=L"ąc";
 if(str[0] == L'ą')
 str[0] = L'a';
 
std::wcout << str <<std::endl;
 }
dzieki salmon.
Pozdrawiam
Chodak