Мне нужно использовать массив символов и взять символы в массиве и использовать их как прописные, так и строчные. Я смотрел на 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 []? Есть ли другой способ, которым я должен делать это (помня, что мне нужно использовать массивы символов)?
Да, putchar()
печатает символ в стандартный вывод программы Это его цель. Это источник вывода в верхнем регистре.
cout
В нижней части программы печатается исходная строка, потому что вы никогда не изменяли ее. toupper()
функция не — действительно не может — изменить его аргумент. Вместо этого он возвращает заглавный символ.
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++;
}
У меня небольшая проблема с использованием 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