2016-04-04 117 views
1

我有一個比較簡單的問題。用戶應該運行該程序,輸入30個字符或更少的消息,然後單個字母的情況將被切換(小寫字母將被製成upercase,反之亦然)。除了改變案件的部分,一切都很好。我應該使用指向數組中的char的指針,並將其作爲函數參數傳遞給toggle_case。請協助我如何實現這一點。 這是代碼。傳遞數組元素指針c

#include <stdio.h> 
#include <ctype.h> 
#include <string.h> 

void read_message(char *message, int *message_size); 
void toggle_case(char *character); 
void count_cv(char* message); 

int main() { 

    char message[30]; 
    int message_size; 

    char *message_pointer; 
    message_pointer = message; 

    read_message(message, &message_size); 
    int i = 0; 
    for(i =0; i<30; i++){ 
     toggle_case(&message_pointer[i]); 
    } 
    printf("New string: %s",message); 
    return 0; 
} 

void read_message(char *message, int *message_size){ 
    printf("Enter your string (maximum 30 characters): "); 
    fgets(message, 30, stdin); 
} 

void toggle_case(char *character){ 
    //check if character is a letter 
    if (isalpha(*character)) { 
    //Check if the character is upper case 
    if(isupper(*character)){ 
     //convert the character to lower case 
     tolower(*character); 
    } else { 
     //Check if the character is lower case 
     //convert the character to upper case 
     toupper(*character); 
    } 
} 
} 

void count_cv(char* message){ 

} 
+0

你的難度到底是什麼?代碼是否不編譯,是否崩潰,是否產生錯誤的輸出等?向我們解釋清楚,以便我們知道該怎麼幫助你。它看起來好像不會將結果保存到'toggle_case'中的原始字符中。如果這是您的問題,那麼可以在'toggle_case'內分配結果或返回結果供調用者分配。 – kaylum

+0

'message_size'似乎並沒有被使用...... – dreamlax

回答

1

tolowertoupper返回的新特性,你需要指定它回到您更新的位置。

if (isupper(*character)) { 
    *character = tolower(*character); 
} else { 
    *character = toupper(*character); 
} 

順便說一句,你不需要先檢查字符是否是字母。如果它不是字母,則tolowertoupper將簡單地返回該字符。

+0

感謝哥們,這樣一個愚蠢的錯誤。 –