Как заглавные буквы работают?

Мне нужно использовать массив символов и взять символы в массиве и использовать их как прописные, так и строчные. Я смотрел на toupper и его пример, но я не уверен, как это работает. Глядя на пример, приведенный на cplusplus.com, я написал

int main(){
int i = 0;
char str[] = "This is a test.";
while(str[i]){
putchar(toupper(str[i]));
i++;
}
for(int i = 0; i < 15; i++){
cout << str[i];
}
}

и есть две вещи, которые я не понимаю по этому поводу. Во-первых, программа без надписи внизу выводит ЭТО ИСПЫТАНИЕ. Путчар печатает на экран? (использование putchar не объяснено на примере). Но мой второй, более важный вопрос: почему внизу все еще распечатывается кут? Это тест.? Разве это не меняет символы в str []? Есть ли другой способ, которым я должен делать это (помня, что мне нужно использовать массивы символов)?

0

Решение

Да, putchar() печатает символ в стандартный вывод программы Это его цель. Это источник вывода в верхнем регистре.

cout В нижней части программы печатается исходная строка, потому что вы никогда не изменяли ее. toupper() функция не — действительно не может — изменить его аргумент. Вместо этого он возвращает заглавный символ.

2

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

putchar записывает один символ для вывода: http://www.cplusplus.com/reference/cstdio/putchar/

В результате первый цикл while преобразует каждый символ из строки по одному в верхний регистр и выводит их. ОДНАКО, он не меняет содержимое строки str — это объясняет вывод нижнего регистра из второго цикла.

Редактировать:

Я расширил первый цикл:

// Loop until we've reached the end of the string 'str'
while(str[i]){
// Convert str[i] to upper case, but then store that elsewhere. Do not modify str[i].
char upperChar = toupper(str[i]);
// Output our new character to the screen
putchar(upperChar);
i++;
}
1

У меня небольшая проблема с использованием toupper на string / cin,
Я пытаюсь использовать toupper, чтобы сделать его немного проще.

Если я сделаю это,

string answer;
getline(cin,answer); answer=toupper(answer)
//and then a bunch of answers

моя проблема, когда я пытаюсь построить и играть, я получаю это

error: no matching function for call to 'toupper(std::__cxxll::string&)'

если кто-то может помочь, это будет высоко ценится!

~ С-3PO

постскриптум
мои заголовочные файлы:
включить iostream
включить строку
включить cstdlib
включить windows.h
включить алгоритм
включите ctype.h
включить stdio.h

-2