昨天我们初步的学习了字符数组,今天我们将进一步深入学习,首先我们来了解一下今天的学习目标:
- 了解什么是头文件
- 掌握ctype.h头文件部分但字符处理函数
- 掌握string.h头文件中的部分字符串处理函数
- 字符数组补充内容
- 头文件
后缀名是.h
已经写好了一些功能放在.h中,可以直接用
例如#include "文件名.h"
- ctype.h头文件中的部分单字符处理功能(单字符)
islower( ) 判断是否小写字母
isupper( ) 判断是否大写字母
isdigit( ) 判断是否是十进制数组(‘ 0 ’—‘ 9 ’)
isspace( ) 判断是否是空格(空白)字符(蓝C和绿C都可以用)
isblank( ) 判断是否是空格(空白)字符(蓝C可以用绿C不可以用)
isalpha( ) 判断是否是大小写字母
isxdigit( ) 判断是否是16禁止数(‘ 0 ’—‘ 9 ’ ‘ a ’—‘ f ’ ‘A’—‘F’)
tolower( ) 转换成小写字母
toupper( ) 转换成大写字母
- string.h头文件中的部分字符串处理功能(字符串)
1、strlen() 求字符串的长度
字符串长度:有多少个字符,字符串长度就是多少
小括号里只有一个内容
结果是整数(%d输出)
例:char a[10]=”asdf”; strlen(a)=4;
2、strcpy() 字符串赋值
小括号里有两个内容
例:strcpy( a1 , a2 );把a2赋值给a1,a1的值被覆盖
字符串不能直接用“ = ”赋值,所以需要借助strcpy()
3、strcat() 字符串连接
小括号里有两个内容
例:strcat( a1 ,a2 ); 把a2拼接在a1后面,a1就变成a1+a2
4、Strcmp() 字符串比较
小括号里有两个内容
结果是整数——两个内容相等是0,第一个大于第二个是大于1,小于是-1
例:strcmp( a , b )0; 比较a和b大小
- 字符数组的计算求值
与一维数组求值相似,我就不一一讲解,我会把归纳放在下面各位可以自行参考:
字符串
1、输出
一个字符串char a[100];用%c输出
int i , n=strlen(a);
for(i=0; i<n; i++)
{
printf("%c" , a[i]);
}
一个字符串char a[100];用%s输出
printf("%s" , a);
多个字符串char a[100][100];用%c输出
for(i=0; i<n; i++)
{
for(j=0; j<strlen(a[i]); j++)
{
printf("%c" , a[i][j]);
}
printf(" ");
}
多个字符串char a[100][100];用%s输出
for(i=0; i<n; i++)
{
printf("%s " , a[i]);
}
1、求和 和 平均值 //假定一个字符数组 a[] (以下都是!!!)
数字字符求和
int i , n=strlen(a) , sum=0;
for(i=0; i<n; i++)
{
if(a[i]>='0' && a[i]<='9')
{
sum = sum + (a[i]-48);
count++;
}
}
printf("和是%d 平均值是%.2f" , sum , (float)sum/count);
2、统计个数
统计大写 小写 数字 其他条件字符的个数
int count1=0 , count2=0 , count3=0 , count4=0 ;
for()
{
if(条件1)
{
count1++;
}
else if(条件2)
{
count2++;
}
else if(条件3)
{
count3++;
}
else
{
count4++;
}
}
3、最值
最长字符串 【长度 strlen】 //假定三个数组 int a[]; int b[]; int c[]
简单粗暴直接比较法
if(strlen(a)>strlen(b) && strlen(a)>strlen(c))
printf("最长串是%s 长度是%d" , a , strlen(a));
赋值比较法
char max[100]="";
strcpy(max , a); //max = a;
if(strlen(max) < strlen(b))
strcpy(max , b);
if(strlen(max) < strlen(c))
strcpy(max , c);
printf("最长串是%s 长度是%s" , max , strlen(max));
最大字符串 【大小 strcmp】
简单粗暴直接比较法
if(strcmp(a , b)>0 && strcmp(a , c)>0)
printf("最大串是%s" , a);
赋值比较法
char max[100]="";
//2、其余的人依次打擂主
if( strcmp(max , b)<0 )
strcpy(max , b);
if( strcmp(max , c)<0 )
strcpy(max , c);
printf("最大串是%s" , max);
4、元素变换【不要写多个单if语句,会影响结果,写if……else或者if……else if】
大小写变换
for(i=0; i<n; i++)
{
if(a[i]>='A' && a[i]<='Z')
{
a[i] = a[i] + 32;
}
else
{
a[i] = a[i] - 32;
}
}
奇数变偶数 012 >> 123 890>>901 【0到8加1 9直接变成0】
for(i=0; i<n; i++)
{
if(a[i]>='0' && a[i]<='8')
{
a[i] = a[i] + 1;
}
else if(a[i] == '9')
{
a[i] = '0';
}
}
大写字母循环变换 A变C B变D……X变Z Y变A Z变B
for(i=0; i<n; i++)
{
if(a[i]>='A' && a[i]<='X')
{
a[i] = a[i] + 2;
}
else if(a[i] == 'Y')
{
a[i] = 'A';
}
else if(a[i] == 'Z')
{
a[i] == 'B';
}
}
5、数组迁移
大写迁移
char b[100] = "";
int k=0;
for(i=0; i<n; i++)
{
if(a[i]>='A' && a[i]<='Z')
{
b[k] = a[i];
k++;
}
}
非空格迁移 / 删除空格
char b[100] = "";
int k=0;
for(i=0; i<n; i++)
{
if(a[i]!=' ')
{
b[k] = a[i];
k++;
}
}
删除给定的字符ch,例如morning 删除o 变成 mrning
char b[100] = "";
int k=0;
for(i=0; i<n; i++)
{
if(a[i]!='o')
{
b[k] = a[i];
k++;
}
}
6、查找
单字符查找【常量或变量】
for(i=0; i<n; i++)
{
if(条件) //查找给定的字符变量x是否存在 a[i] == x
{
count++;
}
}
if(count==0)
{
printf("失败");
}
else
{
printf("出现%d次" , count);
}
相邻字符查找
查找is这个单词是否存在与字符串a中 //n为字符串长度
for(i=0; i<n; i++)
{
if(a[i]=='i' && a[i+1]=='s')
{
count++;
}
}
if(count==0)
{
printf("失败");
}
else
{
printf("出现%d次" , count);
}
字符串查找 【在二维数组中char a[100][100]中进行查找】
for(i=0; i<n; i++)
{
if( strcmp(a[i] , (所需查找的字符串))==0 )
{
count++;
}
}
到这里我们就完成了我们今天的学习,我依旧会将思维导图放在底部给大家理解学习,谢谢!