pragma mark 指向函数的指针练习
pragma mark 概念
/**
控制台输出 po * xxx
*/
pragma mark 代码
#include <stdio.h>
char upper(char value);
void upperCase(char *p);
//void ts(char *temp);
void ts(char *temp, void (*funtionP)(char *));
int main()
{
#warning 要求用户输入的一段英文,将用户输入的英文单词所有的首字母大写
// hello world -- > Hello World
// 1. 接收用户输入的字符串
// 2. 遍历字符串,判断当前字符串是不是空格,如果是空格将下一个字符转成为大写
// 1. 先实现接收字符串
// 2. 再实现字母的大小写转换
// 3. 再实现替换字符串中的单词首字符
/*
printf("请输入一句英文, 单词之间用空格隔开\n");
// char *str;
char str[100];
// scanf("%s",str);
gets(str);
printf("str = %s\n",str);
*/
/*
char c = 'a';
// printf("c = %c\n",upper(c));
// printf("c = %c\n",upperCase(&c));
upperCase(&c);
printf("c = %c\n",c);
*/
// 1. 接收用户输入
printf("请输入一句英文, 单词之间用空格隔开\n");
// char *str;
char str[100];
// scanf("%s",str);
gets(str);
// 注意: 数组名称不能做+1的操作,只有指针才可以
/*
char *temp = str;
// 2.遍历字符串
// temp = &str[0]
upperCase(temp);
while (*temp != '\0') { // 第一次取出 h
// 2.1 取出当前的字符,判断是否等于 空格, 如果等于空格就需要将下一个字符转为 大写
if ((*temp) == ' ') {
// 2.2 将下一个字符串转为大写
upperCase(++temp);
}
else
{
temp++;
}
}
*/
// ts(str,upperCase(str));
ts(str, upperCase);
printf("str = %s",str);
return 0;
}
void ts(char *temp, void (*funtionP)(char *))
{
// 1.不管三七二十一 先将第一个字母转换为大写
// 2.遍历字符串
// temp = &str[0]
upperCase(temp);
while (*temp != '\0') { // 第一次取出 h
// 2.1 取出当前的字符,判断是否等于 空格, 如果等于空格就需要将下一个字符转为 大写
if ((*temp) == ' ') {
// 2.2 将下一个字符串转为大写
// upperCase(++temp);
funtionP(++temp);
}
else
{
temp++;
}
}
}
void upperCase(char *p)
{
// 1. 判断是不是小写字母
if (*p >='a' && *p <= 'z')
{
// 2.将小写字母转成大学字母
*p = *p - ('a' - 'A');
}
}
// 将首字母小写 转成 大写
char upper(char value)
{
// 1. 判断是不是小写字母
if (value >='a' && value <= 'z')
{
// 2.将小写字母转成大学字母
value = value - ('a' - 'A');
}
return value;
}