2013-03-29 25 views
-3

我在C程序中遇到問題。我已經在緩衝區中的字符串,並希望將字符串更改爲大寫,然後寫入套接字或將其標準輸出。請在下面的代碼中幫助我。如何在程序中將緩衝區字符串更改爲大寫?

char input[] = buffer; 
int alpha_count = 0; 
for (int i = 0, x = strlen(input); i < x; i++) { 
    if (isalpha(input[i])) { 
    if (alpha_count++ % 2 == 0) 
     input [i] = toupper(input[i]); 
    } 
} 
printf("%s\n", input); 
+2

缺少我相信你有你的理由(只改變每個*其他*字母字符),是否有你遇到的具體問題?你想要*整個*字符串大寫?如果是這樣,可能會失去'alpha_count'邏輯。 – WhozCraig

+0

'char input [] = buffer;'中的初始化器是可疑的。你是否已經打開了套接字?你有沒有想過修改一個字符串文字並崩潰?另外,在數組名和索引方括號之間留出一個空格是非常規的:使用'input [i]'not'input [i]'。 –

回答

1

你的問題是,在本節:

if (isalpha(input[i])) { 
    if (alpha_count++ % 2 == 0) 
    input [i] = toupper(input[i]); 
} 

您需要使用islower想想精心if (alpha_count++ % 2 == 0)目的。這是我想要的使用:

#include <ctype.h> 

void str_upper(char *str) { 
    do { 
     *str = toupper((unsigned char) *str); 
    } while (*str++); 
} 
+1

檢查'islower()'不是必需的。如果沒有合適的大寫轉換,'toupper()'由標準定義返回與輸入值相同的字符。 – WhozCraig

+0

@WhozCraig確實。謝謝。我不知道我的頭腦在哪裏,現在:/ – Sebivor

+0

男人,我知道這種感覺太好了。 – WhozCraig

0

你必須修改這個for循環

for (int i = 0, x = strlen(input); i < x; i++) { 
    if (isalpha(input[i])) { 
    if (alpha_count++ % 2 == 0) 
     input [i] = toupper(input[i]); 
    } 
} 

用下面的代碼

for (int i = 0, x = strlen(input); i < x; i++) { 
     input [i] = toupper(input[i]); 
} 

toupper()頁面cplusplus.com的:

int toupper(int c);

將小寫字母轉換爲大寫將c轉換爲大寫 如果c是小寫字母並且具有等效大寫字母,則等效。 如果沒有這樣的轉換是可能的,返回的值是c不變。

0

爲什麼不使用_strupr?

_strupr(input); 
+0

因爲它不是標準庫的一部分。 'strupr()'是POSIX的一部分,'_strupr()'是ISO C++的一部分。 – WhozCraig

+0

你確定'strupr()'是POSIX嗎?它不爲[POSIX 2008]所知(http://pubs.opengroup.org/onlinepubs/9699919799/toc.htm)。帶有前綴'_',它看起來像一個Microfaustian函數。 –

相關問題