Answer-ID
  • Întrebări
  • Tag-uri
  • Categorii
Notificări
Recompense
Înregistrare
După înregistrare, veți primi notificări despre răspunsurile și comentariile la întrebările DVS.
Logare
Dacă aveţi deja un cont, autentificaţi-vă pentru a verifica notificările noi.
Aici vor fi recompensele pentru întrebările, răspunsurile și comentariile adăugate sau modificate.
Mai mult
Sursă
Editează
 Adam
Adam

String To Lower/Upper în C ++

Care este cel mai bun mod în care oamenii au găsit să facă String to Lower case/Upper case în C ++?

Problema este complicată de faptul că C ++ nu este un limbaj de programare în limba engleză. Există o metodă multilingvă bună?

25 2008-08-14T18:49:47+00:00 8
Programare
c++
string
unicode
Comentarii la întrebare (0)
Darren Kopp
14 august 2008 в 10:53
2008-08-14T22:53:43+00:00
Mai mult
Sursă
Editează
#11502
#include 
std::string data = "Abc";
std::transform(data.begin(), data.end(), data.begin(), ::toupper);

http://notfaq.wordpress.com/2007/08/04/cc-convert-string-la-upperlower caz/

Also, CodeProject article for common string methods: http://www.codeproject.com/KB/stl/STL_string_util.aspx

0
0
Comentarii (0)
Rob Thomas
17 august 2008 в 12:25
2008-08-17T00:25:51+00:00
Mai mult
Sursă
Editează
#13341

De asemenea, trebuie să consultați această întrebare . Practic, problema este că bibliotecile C/C ++ standard nu au fost construite pentru a gestiona datele Unicode, așa că trebuie să te uiți la alte biblioteci.

Acest lucru se poate modifica odată cu actualizarea standardului C ++. Știu că următorul compilator de la Borland (CodeGear) va avea suport Unicode și cred că compilatorul C ++ al Microsoft va avea sau deja are biblioteci de șir care suportă Unicode.

0
0
Comentarii (0)
Steve Gury
17 august 2008 в 5:30
2008-08-17T17:30:59+00:00
Mai mult
Sursă
Editează
#13624

După cum ți-a spus Darren, cea mai ușoară metodă este de a folosi std :: transform.

Dar aveți grijă că într-o anumită limbă, cum ar fi limba germană, nu există întotdeauna o mapare una la alta între majuscule și majuscule. Caracterele "eset" (seamănă cu caracterele grecesc beta) se transformă în "SS" în majuscule.

0
0
Comentarii (0)
Nic Strong
22 august 2008 в 3:05
2008-08-22T03:05:23+00:00
Mai mult
Sursă
Editează
#21395
> std::string data = ?Abc?; 
> std::transform(data.begin(), data.end(), data.begin(), ::toupper);

Acest lucru va funcționa, dar acesta va utiliza locația standard "C". Puteți utiliza fațete dacă aveți nevoie să obțineți un tolower pentru o altă localitate. Codul de mai sus, utilizând fațete, ar fi:

locale loc("");
const ctype& ct = use_facet >(loc);
transform(str.begin(), str.end(), std::bind1st(std::mem_fun(&ctype::tolower), &ct));
0
0
Comentarii (0)
axs6791
26 august 2008 в 10:58
2008-08-26T22:58:13+00:00
Mai mult
Sursă
Editează
#28849

Ceea ce spune Steve este corect, dar cred că dacă codul tău ar trebui să suporte mai multe limbi, ai putea avea o metodă din fabrică care încapsulează un set de metode care fac relevanța pentruUpper sauLower bazat pe acea limbă.

0
0
Comentarii (0)
Utilizator anonim
12 noiembrie 2009 в 10:02
2009-11-12T22:02:13+00:00
Mai mult
Sursă
Editează
#1724567

Pentru copiatorii care speră să utilizeze răspunsul lui Nic Strong, rețineți eroarea de ortografie în "use_factet" și parametrul treilea lipsă la std :: transform:

locale loc("");
const ctype& ct = use_factet >(loc);
transform(str.begin(), str.end(), std::bind1st(std::mem_fun(&ctype::tolower), &ct));

ar trebui să fie

locale loc("");
const ctype& ct = use_facet >(loc);
transform(str.begin(), str.end(), str.begin(), std::bind1st(std::mem_fun(&ctype::tolower), &ct));
0
0
Comentarii (0)
yasouser
2 decembrie 2010 в 5:40
2010-12-02T17:40:00+00:00
Mai mult
Sursă
Editează
#4336156

Dacă aveți Boost, atunci are cel mai simplu mod. Priviți to_upper ()/to_lower () în algoritmi de string Boost .

0
0
Comentarii (0)
NoOne
1 martie 2013 в 9:34
2013-03-01T09:34:06+00:00
Mai mult
Sursă
Editează
#15151222

Am găsit o modalitate de a converti cazul caracterelor unicode (și multilingve), dar trebuie să știți/găsiți (într-un fel) localizarea personajului:

#include 

_locale_t locale = _create_locale(LC_CTYPE, "Greek");
AfxMessageBox((CString)""+(TCHAR)_totupper_l(_T('?'), locale));
_free_locale(locale);

Nu am gasit nici un fel de a face asta inca ... eu stiu cineva, sa ma anunti.

Setarea localizării la NULL nu funcționează ...

0
0
Comentarii (0)
James Oravec
27 ianuarie 2014 в 9:40
2014-01-27T21:40:20+00:00
Mai mult
Sursă
Editează
#21387775

VCL are SysUtils.hpp care are LowerCase (unicodeStringVar) și UpperCase (unicodeStringVar) tu. Folosesc acest lucru în C ++ Builder 2009.

0
0
Comentarii (0)
Adăugati o întrebare
Categorii
Toate
Tehnologii
Cultură
Viață / Artă
Stiință
Profesii
Afaceri
ID
KO
RU
© Answer-ID 2021
Sursă
https://stackoverflow.com
în cadrul licenței cc by-sa 3.0 cu atribuire