8.1字符数组
字符数组是元素的数据类型为字符类型的数组
char ch[10];
字符数组的初始化
char ch[6]={'H','e','l','l','o'};
char ch[6]={"hello"};
char ch[6]="hello";
char ch[]="hello";
#include<stdio.h>
#include<stdlib.h>
int main()
{
char ch1[6]="abc",ch2[]={'d','e','f','\0'};
printf("%s \n",ch1);
printf("%s \n",ch2);
return 0;
}
8.2字符串数组
字符串数组两种定义方式:
1.二维字符数组(固定长度)
char ch [3][10] = {"beijing","chengdu","mianyang"};
特点:
·内存连续分配,每个字符串长度固定(可能浪费空间)
·可以直接修改内容(如:ch[0][0] = 'B';)
2.字符指针数组(动态长度)
char *p[]={"beijing","chengdu","mianyang"};
特点:
·指针指向字符串字面量(存储在只读内存,不可修改)
·灵活支持不同长度字符串,节省内存
C语言中没有字符串常量,用字符数组处理字符串,字符数组结束标识:‘\0’
例如:
#include<stdio.h>
#include<stdlib.h>
int main()
{
char ch[][8] = {"apple","grape","pear","orange"};
int i,n;
n = sizeof(ch)/sizeof(ch[0]);
for(i=0;i<n;i++)
{
printf("%s \n",ch[i]);
}
return 0;
}
输入一个字符串,将字符串逆序输出:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 20
int main()
{
char str[N]={0};
int n,i;
printf("please input str:");
gets(str);
n = strlen(str);
for(i=n-1;i>=0;i--)
{
putchar(str[i]);
}
return 0;
}
或者:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 20
int main()
{
char str[N]={0};
int n,i,j,t;
printf("please input str:");
gets(str);
n = strlen(str);
t = 0;
i = 0;
j = n-1;
while(i<j)
{
t = str[j];
str[j] = str[i];
str[i] = t;
i++;
j--;
}
puts(str);
return 0;
}
8.3字符串函数
C语言库中实现了很多字符串处理的函数
#include<string.h>
8.3.1strlen
字符串长度函数strlen
·格式:strlen(字符数组)
·功能:计算字符串长度
·返回值:返回字符串实际长度,不包括‘\0’在内
\xhh 表示十六进制数代表的符号
\ddd 表示八进制的
例如:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char a[7] = {'a','b','\0','d','\0'};
printf("%d %d\n",sizeof(a),strlen(a));
return 0;
}
8.3.2strcpy
字符串拷贝函数strcpy
·格式:strcpy(字符串1,字符串2);
·功能:将字符串2拷贝到字符串1中
·返回值:返回字符数组1的首地址
·说明:
1.字符数组1必须足够大
2.拷贝时‘\0’一同拷贝
例如:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 20
int main()
{
char s2[] = "hello";
char s1[N];
strcpy(s1,s2);
puts(s1);
puts(s2);
return 0;
}
8.3.3strcat
字符串连接函数strcat
·格式:strcat(字符数组1,字符数组2)
·功能:把字符数组2连接到字符数组1的后面
·返回值:返回字符数组1的首地址
·说明:
1.字符数组1必须足够大
2.连接前,两串均以‘\0’结束,连接后,串1的‘\0’取消,新串最后加‘\0’
举例:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 20
int main()
{
char s2[] = "hello";
char s1[N] = "grill";
strcat(s1,s2);
puts(s1);
puts(s2);
return 0;
}
8.3.4strcmp
字符串比较函数strcmp
·格式:strcmp(字符串1,字符串2)
·功能:比较两个字符串
·比较规则:将两串字符串从左向右逐个字符比较(ASCII),直到遇到不同字符或‘\0’为止
·返回值:返回int型整数
1.若字符串1<字符串2,返回负整数
2.若字符串1>字符串2,返回正整数
3.若字符串1=字符串2,返回零
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 20
int main()
{
char s2[] = "hello";
char s1[N] = "grill";
printf("%d \n",strcmp(s1,s2));
return 0;
}
8.3.5字符串扩展用法
·strncpy(p,p1,n),复制指定长度字符串
·strncat(p,p1,n),附加指定长度字符串
·strcasecm,忽陷大小写比较字符串
·strncmp(p,p1,n),比较指定长度字符串
·strchr(p,c),在字符串中查找指定字符
· strstr(p,p1)查找字符串
1. isalpha()检查是否为字母字符
2. isupper()检查是否为大写字母字符
3. islower()检查是否为小写字母字符
4.isdigit()检查是否为数字