传递c中的数组元素指针

时间:2016-04-04 23:23:09

标签: c arrays pointers

我有一个相对简单的问题。用户应该运行程序,键入30个字符或更少的消息,然后切换消息的单个字母的大小写(小写字母将成为upercase,反之亦然)。一切都很好,除了改变案件的部分。我应该使用指向数组中的char的指针,并将其作为函数参数传递给toggle_case。请帮助我如何实现这一目标。 这是代码。

  #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){

}

1 个答案:

答案 0 :(得分:1)

tolowertoupper会返回新字符,您需要将其分配回您正在更新的位置。

if (isupper(*character)) {
    *character = tolower(*character);
} else {
    *character = toupper(*character);
}
顺便说一句,你不需要先检查角色是否是一个字母。如果字符不是字母,则tolowertoupper只会返回字符。