第09天C语言(09):指向函数的指-针练习

二、代码
#include 
char upper(char value);
void upperCase(char *p);
//void ts(char *temp);
void ts(char *temp,void(*funtionP)(char *));
int main()
{
#pragma 1.要求用户输入一段英文,将用户输入的英文单词所有的首字母大写
    // hello world ---> Hello world
    
    // 1.接收用户输入的字符串
    // 2.遍历字符串,判断当前字符串是不是空格,如果是空格 就将下一个字符 转换为大写
    
    // 1.先实现接收字符串
    // 2.在实现 字母的大小写转换
    // 3.在实现 替换字符串的单词首字母
    
//    char *str; 指针没有初始化,不能随便使用
//    char str[100];
    //    scanf("%s",str);
//    gets(str);
//    printf("str = %s\n",str);
    
    
    /*
    char c = 'a'; //
//    printf("c = %c\n",upper(c));
    upperCase(&c);
    // *p == c
    printf("c = %c\n",c);
     */
    
    // 1.接收用户输入的数据
    printf("请输入一句英文,单词之间用空格隔开\n");
    char str[100];
    gets(str);
    // 注意 : 数组名称 不能做+1操作,只有指针才可以
    
    /*
    char *temp = str;
    upperCase(temp);
    // 2.遍历字符串
    while (*temp !='\0') {
        // 2.1 取出当前的字符, 判断是否等于 空格 ,如果等于空格 就需要将下一个 字符转换为大写
        if ((*temp) == ' ') {
            // 2.2 将下一个字符 转换为大写
            upperCase(++temp);
        }
        else
        {
            temp++;
        }
    }
    */
    ts(str,upperCase);
    
    printf("str = %s\n",str);

    return 0;
}

// void(*funtionP)(char *) 可以提供大小写的方法
void ts(char *temp,void(*funtionP)(char *))
{
    // 1.不管三七二十一 先将第一个字母转换为大写
    upperCase(temp);
    // 2.遍历字符串
    while (*temp !='\0') {
        // 2.1 取出当前的字符, 判断是否等于 空格 ,如果等于空格 就需要将下一个 字符转换为大写
        if ((*temp) == ' ') {
            // 2.2 将下一个字符 转换为大写
//            upperCase(++temp);
            (funtionP)(++temp);
            
        }
        else
        {
            temp++;
        }
    }
    
}

void upperCase(char *p)
{
    if (*p >='a' && *p <= 'z') {
        *p = *p - ('a' - 'A'); // 32 小写的ASCII 大于 大写的
    }
}

char upper(char value)
{
    // 1.判断是不是小写字母
    if (value >='a' && value <= 'z') {
        value = value - ('a' - 'A'); // 32 小写的ASCII 大于 大写的
    }
    return value;
}

你可能感兴趣的:(第09天C语言(09):指向函数的指-针练习)