Jaki jest najlepszy/najczystszy sposób na przekonwertowanie złożonego ciągu znaków na małe litery w C?c - przekonwertuj ciąg z wieloma literami na wszystkie małe litery:
Odpowiedz
Jest w standardowej bibliotece i jest to najprostszy sposób, jaki mogę zobaczyć, aby zaimplementować taką funkcję. Więc tak, po prostu przeprowadź pętlę przez łańcuch i zamień każdy znak na małe litery.
Coś trywialne tak:
for(int i = 0; str[i]; i++){
str[i] = tolower(str[i]);
}
lub jeśli wolisz jeden wkładki, można użyć tego jednego JF Sebastian:
for (; *p; ++p) *p = tolower(*p);
'for (; * p; ++ p) * p = tolower (* p);' wydaje się bardziej idiomatyczny. – jfs
@ J.F. proszę bardzo. Zależy od tego, czy kod ma wyglądać przerażająco, czy ładnie :) (bardzo czytelny jeden liniowiec, ale wygląda na przerażający) – Earlz
daje mi to segfault, jeśli str jest "char *", ale nie jeśli str jest tablicą char. Masz jakieś wytłumaczenie? –
Czy zajmujesz się tylko ciągami ASCII i nie masz problemów z ustawieniami regionalnymi? Więc tak, to byłby dobry sposób na zrobienie tego.
co się dzieje, gdy wywoływana jest funkcja tolower() w char-a-z-ascii? lubić '!' lub "#". testowałem go na "#" i wydawało się, że działa dobrze. czy jest to na ogół prawdziwe dla wszystkich znaków ASCII, które nie są literami a-z? – sepiroth
@hatorade: 'tolower()' pozostawia argument niezmieniony, jeśli nie znajduje się w zakresie "A" .. "Z". – jfs
! i # to oba znaki ascii. Mark odwoływał się do innych kodowań, takich jak UTF8, gdzie nie można założyć, że istnieje jeden bajt na znak (jak to robi) – hdgarrood
do konwersji na małe litery jest równoważna rosnąć nieco 0x60:
for(char *p = pstr;*p;++p) *p=*p>0x40&&*p<0x5b?*p|0x60:*p;
(łacińskiego kodowej oczywiście)
Aby było to nieco bardziej czytelne, możesz zrobić "dla (char * p = pstr; * p; ++ p) * p = * p> = 'A' && * p <= 'Z'? * P | 0x60: * p; ' –
Ta wersja jest wolniejsza od' tolower() 'w glibc. 55,2 vs. 44,15 na moim komputerze. – jfs
Nie mogę sobie wyobrazić, że: tolower() zajmuje się znakami; tylko jeśli jest to makro –
Jeśli potrzebujesz wsparcia Unicode w dolnym funkcji case zobaczyć to pytanie: Light C Unicode Library
Jeśli mamy zamiar być tak niechlujny jak używać tolower()
, to zrobić:
char blah[] = "blah blah Blah BLAH blAH\0"; int i=0; while(blah[i]|=' ', blah[++i]) {}
Ale dobrze , wybucha, jeśli nakarmisz go symbolami/cyframi, a ogólnie jest zły. Ale dobre pytanie z wywiadu.
Tak, to spowoduje złożenie/wrzeciono/okaleczenie różnych symboli (w ASCII każdy symbol, znak kontrolny lub cyfra z bitem 5 clear stanie się tym samym kodem znaku z ustawieniem bitu 5 itd.) Tak naprawdę, poważnie, don ' t go używaj. –
Ten post jest omówiony na [meta] (http://meta.stackoverflow.com/questions/270402/is-ghetto-an-offensiveword). –
- 1. Sprawdź, czy ciąg mają wielkie litery, małe litery i numer
- 2. jQuery.attr() gwarantuje małe litery?
- 3. Flaga formatu ciągów C# lub modyfikator na małe litery
- 4. Małe litery Web API Małe litery
- 5. PHP: Konwertuj wielkie litery na wielkie litery na małe litery
- 6. python 2.7 małe litery
- 7. Pojedyncze wyrażenie regularne, które zmienia wielkość litery na małe litery na małe litery
- 8. Dlaczego funkcje parenscript zostały zmienione na wszystkie małe litery?
- 9. Jak przekonwertować ciąg na wielkie/małe litery w Jinja2?
- 10. przekonwertuj ciąg na liczbę całkowitą w C++
- 11. Zapobieganie przekształcaniu przez BeautifulSoup moich znaczników XML na małe litery
- 12. Groovy/Grails zawiera małe litery
- 13. Jak zmienić wszystkie klawisze na małe litery podczas analizowania JSON do JToken
- 14. IntelliJ IDEA autouzupełnianie małe litery SQL
- 15. Wielkie litery mvc Model vs małe litery
- 16. Małe litery PostgreSQL do porównywania danych
- 17. sed one-liner do konwersji wielkich liter na małe litery?
- 18. Jak przekonwertować wielkie litery na małe litery w Notatniku ++
- 19. Słownik na małe litery w Pythonie
- 20. przekonwertuj dwuwymiarową tablicę na ciąg
- 21. Mecz i małe litery regexp
- 22. Titlecasing ciąg z wyjątkami
- 23. C ciąg na duże litery w C i C++
- 24. podzielić ciąg przez literami
- 25. Błąd konwersji tekstu na małe litery z tm_map (..., tolower)
- 26. H2 Polecenie "runscript" zamienia wszystkie nazwy tabel na wielkie litery.
- 27. Jak przekształcić ciąg znaków na małe z preg_replace
- 28. Adres URL przepisania URL-a IIS na małe litery
- 29. AutoMapper i przekonwertuj datetime na ciąg
- 30. C++: przekonwertuj wektor na krotkę
Czy zajmujesz się tylko ASCII literami a-z? –
ascii. jak bym to wziął pod uwagę? czy poniższy przykład nadal działa? co się stanie, jeśli mój znak jest "#" i zostanie wywołany tolower()? – sepiroth
To zadziała. Byłem bardziej myślenia, jeśli twój ciąg zawiera rzeczy takie jak é lub Ü. –