ctype.h字符函数和字符串

ctype.h字符函数和字符串

  • 利用toupper()函数可以处理字符串中的每个函数,把整个字符串转换成大写
  • 利用ispunct()函数可以统计字符串中标点符号的个数(可以是非字母的任意图形字符)
  • 利用strchr()函数处理fgets()读入字符串的换行符(如果有的话)
/** @Author: Your name* @Date:   2020-02-24 14:35:13* @Last Modified by:   Your name* @Last Modified time: 2020-02-25 15:02:26*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LIMITS 81
void Toupper(char *str);
int PunctCount(char *str);
int main()
{char line[LIMITS];char *find;puts("Please enter a line.");fgets(line,LIMITS,stdin);find = strchr(line,'\n');//查找输入的line里面是否有换行符/*char *  strchr(const char*str,char ch)找到返回该地址,否则返回为NULL*/if(find){*find = '\0';//将换行符赋值为空字符}Toupper(line);//调用转大写函数puts(line);//数组名是地址printf("That line has %d punctuation characters.\n",PunctCount(line));getchar();return 0;
}
void Toupper(char *str)
{while(*str){*str = toupper(*str);str++;}
}
int PunctCount(char *str)
{int i = 0;while(*str){if(ispunct(*str)){/*如果 c 是一个标点符号字符,则该函数返回非零值(true),否则返回 0(false)*/i++;}str++;//地址向前移动}return i;
}

while(*str)循环处理str指向的字符串的每个字符,知道遇到空字符。此时*str的值为0(空字符的编码值为0),即循环条件为假,结束循环,下面是该程序的运行示例:

Please enter a line.Me? You talkin' to me? Get outta here!
ME? YOU TALKIN' TO ME? GET OUTTA HERE!That line has 4 punctuation characters.

该程序使用fgets()strchr组合,读取一行输入并把换行符替换成空字符。这种方法与使用s_gets()函数的区别是:如果输入的内容超过数组的长度时,s_gets()函数会处理多余的内容,为下一次输入做好准备。而本例中只有一行输入,就没有必要进行多余的步骤。

链接:ispunct函数
链接:toupper函数

ctype.h字符函数和字符串

ctype.h字符函数和字符串

  • 利用toupper()函数可以处理字符串中的每个函数,把整个字符串转换成大写
  • 利用ispunct()函数可以统计字符串中标点符号的个数(可以是非字母的任意图形字符)
  • 利用strchr()函数处理fgets()读入字符串的换行符(如果有的话)
/** @Author: Your name* @Date:   2020-02-24 14:35:13* @Last Modified by:   Your name* @Last Modified time: 2020-02-25 15:02:26*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LIMITS 81
void Toupper(char *str);
int PunctCount(char *str);
int main()
{char line[LIMITS];char *find;puts("Please enter a line.");fgets(line,LIMITS,stdin);find = strchr(line,'\n');//查找输入的line里面是否有换行符/*char *  strchr(const char*str,char ch)找到返回该地址,否则返回为NULL*/if(find){*find = '\0';//将换行符赋值为空字符}Toupper(line);//调用转大写函数puts(line);//数组名是地址printf("That line has %d punctuation characters.\n",PunctCount(line));getchar();return 0;
}
void Toupper(char *str)
{while(*str){*str = toupper(*str);str++;}
}
int PunctCount(char *str)
{int i = 0;while(*str){if(ispunct(*str)){/*如果 c 是一个标点符号字符,则该函数返回非零值(true),否则返回 0(false)*/i++;}str++;//地址向前移动}return i;
}

while(*str)循环处理str指向的字符串的每个字符,知道遇到空字符。此时*str的值为0(空字符的编码值为0),即循环条件为假,结束循环,下面是该程序的运行示例:

Please enter a line.Me? You talkin' to me? Get outta here!
ME? YOU TALKIN' TO ME? GET OUTTA HERE!That line has 4 punctuation characters.

该程序使用fgets()strchr组合,读取一行输入并把换行符替换成空字符。这种方法与使用s_gets()函数的区别是:如果输入的内容超过数组的长度时,s_gets()函数会处理多余的内容,为下一次输入做好准备。而本例中只有一行输入,就没有必要进行多余的步骤。

链接:ispunct函数
链接:toupper函数