九.字符数组和字符串
9.1 字符数组
字符类型的数组:char c[10],ch[3][4]
字符数组的初始化
逐个字符赋值:char ch[5] = {‘H’,‘e’,‘l’,‘l’,‘o’};
‘a’,‘b’,‘c’+‘\0’ ==“abc”
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str1[3] = {'a','b','c'};//字符数组没有以'\0'结尾,乱码
char str2[6] = {'a','b','c'};
printf("%s\n",str1);
printf("%s\n",str2);
return 0;
}
9.2 字符串数组
c语言中没有字符串常量,用字符数组处理字符串,字符串结束表示:‘\0’
#include <stdio.h>
#include <stdlib.h>
int main()
{
char fruit[][10] = {"apple","pear","grape","orange"};
int m,n,i,j;
m = sizeof(fruit)/sizeof(fruit[0]);
n = sizeof(fruit[0])/sizeof(char);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
putchar(fruit[i][j]);
}
putchar('\n');
}
return 0;
}
//字符串逆序输出
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#define N 20
int main()
{
char str[N] = {0};//字符数组初始化
int i,n;
printf("please input:");
gets(str);//gets输入字符串
n = strlen(str);
for(i=n-1;i>=0;i--)
{
putchar(str[i]);//putchar输出字符
}
return 0;
}
方法二
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#define N 20
int main()
{
char str[N] = {0};
int i,j,n,t;
printf("inputs:");
gets(str);
n = strlen(str);
i = 0;
j = n-1;
while(i<j)
{
t = str[i];
str[i] = str[j];
str[j] = t;
i++;
j--;
}
puts(str);
return 0;
}
9.3.1 strlen
返回值:返回字符串实际长度,不包括’\0’在内
strlen是个函数,只计算’\0’前面的字符
sizeof是个运算符
#include <stdio.h>
#include<string.h>
int main()
{
char str[10] = {'a','0','b','0','c'};
printf("%d %d\n",strlen(str),sizeof(str));
return 0;
}
9.3.2 strcpy
字符串拷贝函数
strcpy(字符串1,字符串2);
返回值:返回字符数组1的首地址
说明:1、字符数组1必须足够大
2、拷贝时’\0’一同拷贝
#include <stdio.h>
#include<string.h>
#define N 30
int main()
{
char str[] = "hello";
char des[N];
strcpy(des,str);
puts(des);
return 0;
}
方法二
#include <stdio.h>
#include<string.h>
#define N 30
int main()
{
char des[N];
char str[] = "hello";
int i = 0;
int n;
n = strlen(str);
while(i<=n)
{
des[i] = str[i];
i++;
}
puts(des);
return 0;
}
9.3.3 strcat
字符串连接函数strcat
功能:把字符数组2连接到字符数组1后面
返回值:返回字符数组1的首地址
说明:1、字符数组1必须足够大
2、连接前,两串均以’\0’结束,连接后,串1的’\0’取消,新串最后加’\0’
9.3.4 strcmp
字符串比较函数strcmp
功能:比较两个字符串
对两串从左到右逐个字符比较ascll,直到遇到不同字符或’\0’为止
返回值:返回int型整数
1、若字符串1<字符串2,返回负整数
2、若字符串1>字符串2,返回正整数
3、若字符串1=字符串2,返回零
#include <stdio.h>
#include<string.h>
int main()
{
char str1[] = "hello";
char str2[] = "abc";
strcat(str1,str2);
printf("%d\n",strcmp(str1,str2));
puts(str1);
return 0;
}