2014-10-17 41 views
0

我需要使用一個字符數組並獲取數組中的字符,並根據需要進行大寫和小寫。我正在看toupper和它的例子,但我對這是如何工作感到困惑。從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打印到屏幕上嗎? (使用putchar的例子沒有解釋)。但我的第二個更重要的問題是爲什麼底部的cout仍然打印出來這是一個測試。它不會改變str []中的字符嗎?有沒有另外一種方法我應該這樣做(記住我需要使用字符數組)?而循環在時間上殼體從STR一個每個字符轉換,並將其輸出http://www.cplusplus.com/reference/cstdio/putchar/

其結果是,第一:

+0

[將C++中的字符串轉換爲大寫]可能的重複(http://stackoverflow.com/questions/735204/convert-a-string-in-c-to-upper-case) – Samer 2014-10-17 20:33:08

+1

要實際更改'str'的​​內容,你可以做'str [i] = toupper(str [i]);'在你的循環中。 – iwolf 2014-10-17 20:35:00

+0

@iwolf在我看到你的答案之前,我想了一下自己。我希望你把這個作爲答案,所以我可以信任你。謝謝! – 2014-10-17 20:41:29

回答

1

的putchar寫入單個字符來輸出。但是,它不會改變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++; 
} 
2

是的,putchar()打印字符到程序的標準輸出。這是它的目的。它是大寫輸出的來源。

程序底部的cout會打印原始字符串,因爲您從未修改它。 toupper()功能不 - 實際上不能 - - 修改它的參數。相反,它返回大寫字符。

相關問題