处理字符串的一些C函数

注意:以下函数都包含在ctype.h头文件中

1.isalpha函数 用来判断得到的参数是不是字母

 1 #include<stdio.h>
 2 #include<ctype.h>
 3 
 4 int main ()
 5 {
 6 /*    
 7     isalpha函数用来检测数值是否为大小写字母 返回值分为三种
 8     1.大写字母,返回值为1
 9     2.小写字母,返回值为2
10     3.不是字母,返回值为0 
11 */
12     char c ;
13     scanf("%c",&c);
14     int State;
15     State=isalpha(c);//大写字母返回1 小写字母返回2
16     //    printf("%d",State); 
17                                                                                          
18     if(State==1)
19     {
20         printf("输入的是大写字母
");
21     }
22     else if (State==2)
23     {
24         printf("输入的是小写字母
");                    
25     }         
26     else {
27         printf("sb你输入的不是字母
");
28     }
29                                                     
30     return 0;
31 }

 因为isalpha只能判断单个字符,感觉不是那么好用的样子 ,百度了一下它的相关资料,在百度百科词条中发现了一个利用这个函数来写的一个判断输入字母个数的程序 如下:

 1 #include<ctype.h>
 2 #include<stdio.h>
 3 int main(void)
 4 {
 5 char ch;
 6 int total;
 7 total=0;//赋值
 8 /*统计字母块*/
 9 do
10 {
11 ch=getchar();
12 if(isalpha(ch)!=0)
13 ++total;
14 }while(ch!='.');//结束符号为.
15 printf("The total of letters is:%d
",total);
16 return 0;
17 }
18 /*运行结果*/
19 输入:123456我am侯云江.
20 输出:The total of letters is:2

下面的代码,是我对上面的代码,做过了一些小的改动,比如 我将结束符号 改为换行符 这样更人性化了一些 不用输入 "." 来作为 输入的结束符号 因为 换行符,表示将键盘缓冲区的数据发送到程序中 也就是一次输入的结束 getchar();也会接受这个换行符 它们之间是不会影响的  在一次输入结束的同时 getchar()也会得到 ch= 后 经过while判断后 条件不满足 就可以退出循环了

 1 # include <stdio.h>
 2 # include <ctype.h>
 3 
 4 int main ()
 5 {
 6     char ch;
 7     int total=0; //初始化
 8     
 9     //统计输入字母数量 
10     do{
11         ch=getchar();
12         if(isalpha(ch)!=0)
13         {
14             total=total+1;
15         }
16     } while(ch!='
'); //设置字符串的结束符号为 
 可任意设置  
17     printf("共输入了%d个字母
",total);
18     return 0;
19 }
20 /*
21 1.用getchar() 从键盘中读入一个字符 到ch变量中
22 2.用if语句来判断isalpha函数返回的值 不为0的话 则是字符(大小写都有可能)total的值加1   
23 3.判断n+1次ch的值是否 为换行符 如果是话 就终止循环 结束程序
24 
25 为什么是n+1次呢?
26 我输入a然后回车
27 a传到ch中 经过isalpha判断后返回值为非0 条件成立 执行if中语句 total=1 
28 判断ch值不为
 
29 
 传入到ch中 经过isalpha函数判断为0 条件不成立 不执行if中语句 total值不变
30 while判断 ch的值== 
 条件不成立 终止循环 
31 
32 */

下面的代码是我做的测试,内容是再输入很多字符的时候 最终ch的值会是多少

 1 # include <stdio.h>
 2 # include <ctype.h>
 3 
 4 int main ()
 5 
 6 {
 7     char a,b,c;
 8     do{
 9 
10     a=getchar();
11     
12     }while(a!='.'); 
13     printf("%c",a);
14     
15     return 0;
16 }

运行结果:

由此可见 在do while循环中 你输入的最后一个字符 就为a或者ch 变量中的值 我输入的值是. 换行符也是一样 只是 换行符还有一种的一种作用就是结束输入 将键盘缓冲区中的数据放到程序中 在这里例子中也就是发送到a变量中 上个例子就是发送到ch变量中 


2.isdigit函数 判断得到的参数是否为阿拉伯数字0-9

函数说明
检查参数c是否为阿拉伯数字0到9。
返回值
若参数c为阿拉伯数字,则返回TRUE,否则返回NULL(0)。

相关代码的联系 用isdigit函数找出一串字符串中的数字 用循环的方式 遍历数组中的每个元素 将每个元素都作为isdigit的参数

 1 #include<stdio.h>
 2 #include<ctype.h>
 3 int main()
 4 {
 5     char str[]="123@#FDsP[e?";
 6     int i;
 7 
 8 
 9    
10     /*
11     0.断str[x]中保存的值 不是结束符号的话 就一直循环
12     1.用if判断isdigit中的返回值 如果是非0 则条件成立 执行if语句中内容
13     2.打印对应的str[x]字符数组中的值 
14     
15     
16     */ 
17     for(i=0;str[i]!='';i++)
18     {
19         if( isdigit (str[i]) )
20         printf( "%c is an digit character
",str[i] );
21     }
22 }

3.isalnum函数 传入的参数如果是字符(包含0-9阿拉伯数字+大小写字母)就返回true(!0) 否则返回 0 主要用来判断 我猜是用来判断传入的特殊符号

结合前三个函数做的一个小程序 从键盘中读入字符串 输入字符串中字母个数(大小写字母个数)和数字个数和特殊符号个数

 1 #include<stdio.h>
 2 #include<ctype.h>
 3 
 4 //从键盘中读入字符串 输入字符串中字母个数(大小写字母个数)和数字个数和特殊符号个数
 5 int main ()
 6 {
 7     char name[100];
 8     gets(name); //获得字符存入name字符数组中 
 9     int i,dch,xch,digit,tch;
10     dch=0;
11     xch=0; 
12     tch=0;
13     digit=0;
14     for(i=0;name[i]!=0;i++)
15     {
16         if(isalpha(name[i])==1)  //返回值为1 为大写字母 大写字母+1 
17         {
18             dch=dch+1;
19          } 
20          if(isalpha(name[i])==2)  //返回值为2 为小写字母  小写字母+1 
21          {
22              xch=xch+1;
23          }
24         if(isalnum(name[i])==0) //返回值为0 证明值为特殊符号 不包含大小写字母和数字 
25         {
26             tch=tch+1;
27         }
28         
29         if(isdigit(name[i]))
30         {
31             digit=digit+1;
32         } 
33         
34     }
35     printf("你输入的字符串中有
%d大写字母
%d小写字母
%d个特殊符号
%d个数字",dch,xch,tch,digit);
36     
37     
38     
39     return 0;
40  } 
原文地址:https://www.cnblogs.com/dire/p/5062372.html