Як я можу перетворити змішаний рядок у нижній регістр на C?
strlwr((char*)str);
Він просто проходить через рядок і сам перетворює його.
Як я можу перетворити змішаний рядок у нижній регістр на C?
strlwr((char*)str);
Він просто проходить через рядок і сам перетворює його.
Відповіді:
Це в стандартній бібліотеці, і це найбільш прямий шлях, який я бачу, щоб реалізувати таку функцію. Так що так, просто переведіть через рядок і перетворіть кожен символ у малі регістри.
Щось тривіальне, як це:
#include <ctype.h>
for(int i = 0; str[i]; i++){
str[i] = tolower(str[i]);
}
або якщо ви віддаєте перевагу одному вкладишу, тоді ви можете використовувати цей JF Себастьян:
for ( ; *p; ++p) *p = tolower(*p);
for ( ; *p; ++p) *p = tolower(*p);
здається ідіоматичнішим.
char *
, але не, якщо str - це масив char. У вас є якесь пояснення?
для перетворення в нижній регістр еквівалентний біту підняття 0x60, якщо ви обмежитеся ASCII:
for(char *p = pstr; *p; ++p)
*p = *p > 0x40 && *p < 0x5b ? *p | 0x60 : *p;
for(char *p = pstr;*p;++p) *p=*p>='A'&&*p<='Z'?*p|0x60:*p;
tolower()
. 55,2 проти 44,15 на моїй машині.
int (*)(int)
підпис. Ось код, який використовується для вимірювань продуктивності gist.github.com/370497
Ви просто маєте справу з рядками ASCII, і у вас немає проблем з локалью? Тоді так, це був би хороший спосіб зробити це.
tolower()
залишає аргумент незмінним, якщо він не знаходиться в діапазоні 'A' .. 'Z'.
Якщо вам потрібна підтримка Unicode в нижній регістрі, дивіться це запитання: Світла бібліотека Unicode
Якщо ми будемо такими ж неохайними, як це використовувати tolower()
, зробіть це:
char blah[] = "blah blah Blah BLAH blAH\0"; int i=0; while(blah[i]|=' ', blah[++i]) {}
Але, добре, вона вибухає, якщо годувати її якимись символами / цифрами, і взагалі це зло. Хоча питання про інтерв'ю.