Bir kez daha basit soru: std::string
olması, karakterlerinin hangilerinin dili ve bölgesel ayarları (yerel ayar) ile ilgili rakam, sembol, beyaz boşluk vb. Olduğunu belirler. Ben ayrıca ch
bir rakam veya bir simge veya başka bir şey olup olmadığını belirlemek için herhangi bir yol göremiyorum, ancakKarakter sınıflandırması
std::string text = u8"生きるか死ぬか";
boost::locale::boundary::segment_index<std::string::const_iterator> characters(
boost::locale::boundary::character,
text.begin(), text.end(),
boost::locale::generator()("ja_JP.UTF-8"));
for (const auto& ch : characters) {
// each 'ch' is a single character in japanese language
}
:
Ben boost locale boundary analysis tool kullanarak karakter kümesi içine dize bölmek başardı. boost string classification algorithms var, ancak bunlar*segment_index::iterator
ile çalışıyor.
Ne de char
veya wchar_t
bir içine artırmak segmentini dönüştürmek mümkün olup olmadığını ben emin olduğum için, std::isalpha(std::locale)
uygulayabilirsiniz.
Sembolleri sınıflandırmak için herhangi bir temiz yol var mı?
Her zamanki gibi: kim, aşağılayıcı: neden? Sorunun nesi var? Doğru cevabı kesinlikle biliyor musunuz? – Ixanezis
Yanılmıyorsam, 'ch' türünde 'segment', ve bir çift yineleyici tarafından oluşturulur. Yani 'ch' bir karakteri sınırlamak için 'metin' üzerindeki yineleyici çiftini içerir. Sınıflandırma işlevleri sadece bir "char_type" değeri gerektirdiğinden ve çok baytlı karakterler kullandığınızdan, her segmenti yalnızca bir karakterden oluşan bir widechar dizesine (dizede aranan değilse) dönüştürüp ardından classify işlevini kullanabilirsiniz. Mantıklı mı? –
Gonmator
@Gonmator: Eğer sizi doğru anladıysam, 'std :: string' 'i bir 'std :: wstring'' e çevirmeyi ve' str [0 'varsayarak 'isdigit (str [0])' komutunu kullanmanız önerilir. ] şimdi tek geniş bir karakter anlamına geliyor. Yanılmıyorsam, bu kodun doğru çalışması için şansı artırır, ancak hala tek bir "wchar_t" ile temsil edilemeyen semboller vardır, örn. "שָלוֹם" içinde. Eğer buna güvenirsem, sınır analizini artırabilirim ve her zaman geniş-karakterli bir dizge varsa str [0] 'ı kullanabilirim. – Ixanezis