2014-10-17 4 views
0

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

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]; 
    } 
} 

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

+0

Возможный дубликат [Преобразование строки в C++ в верхний регистр] (http://stackoverflow.com/questions/735204/convert-a-string-in-c-to-uppercase) – Samer

+1

Чтобы реально изменить содержимое 'str', вы можете сделать' str [i] = toupper (str [i]); 'в вашем цикле. – iwolf

+0

@iwolf Я понял это за минуту до того, как увидел ваш ответ. Я хочу, чтобы вы положили это как ответ, чтобы я мог вас счесть. Благодаря! –

ответ

1

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

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

Edit:

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

// 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++; 
} 
2

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^