Реализация C ++ toUpper

Я сделал реализацию toUpper (). Это не работает на 100%.

Код:

char* toUpper(char* string)
{
char* sv = string;
while(*sv++ != '\0')
{
if( int(*sv) >= 97 || int(*sv) <= 122)  //Only if it's a lower letter
*sv = char( *sv - 32);
}
return string;
}

Я знаю, что строчные буквы имеют цифры от 97 до 122 (в ASCII), а верхние буквы — от 65 до 90. Между строчными и строчными буквами ровно 32 цифры. Поэтому я просто вычел 32 из нижнего знака.

Код, где я вызываю эту функцию:

char h[] = "Whats up?";
cout << toUpper(h) << endl;

Я ожидал, что программа выведет «ЧТО ПРОИСХОДИТ?» но вместо этого я получил «WHATS». Что я сделал не так?

2

Решение

if( int(*sv) >= 97 || int(*sv) <= 122)

должно быть

if( int(*sv) >= 97 && int(*sv) <= 122)

или предпочтительно

if( *sv >= 'a' && *sv <= 'z')
*sv = *sv - ('a' - 'A');

Вам также нужно переместить точку, в которой вы увеличиваете sv, Текущий код пропускает проверку первого символа в string

while(*sv != '\0')
{
if( *sv >= 'a' && *sv <= 'z')
*sv = *sv - ('a' - 'A');
sv++;
}

Наконец, я уверен, что вы знаете об этом, но на всякий случай … если это не домашнее задание или другое учебное упражнение, стандарт C ToUpper функция сделает для вас точно такую ​​же работу

*sv = (char)toupper(*sv);
5

Другие решения

Наличие ++ в то же время заставляет вас упускать важные дела. В int () все лишнее. Тебе нужно && в состоянии проверки. Действие может быть записано с — =.

2

Вот переписывание, которое использует цикл for и исправляет как условное, так и пошаговое приращение:

char* toUpper(char* string)
{
for(char* p=string; *p != '\0'; p++)
{
if(*p >= 'a' && *p <= 'z')  //Only if it's a lower letter
*p -= 32;
}
return string;
}
1

re: «Я ожидал, что программа выдаст« ЧТО ТАКОЕ? », но вместо этого я получил« ЧТО ». Что я сделал не так?» Вы не предоставили код, который является дефектным. Если бы мне пришлось угадывать, в основном вы звоните argv [1], но я только догадываюсь, что ваш main не включен.

0
По вопросам рекламы [email protected]