一、字符数组与字符串
1、字符数组与字符串的区别
是否为字符串的标志是结尾是否有'\0'
char str[]="abc"; //这是一个字符串
char str[]={'a','b','c'}; //这是一个字符数组,结尾没有'\0'
char str[4]={'a','b','c'}; //这是一个字符串,因为字符数组的长度为4,只填充了3个字符,结尾自动补上'\0'
2、字符数组与字符串的遍历
只有字符串可以使用%s的格式输出
char str[]="hello world!";
int n=sizeof(str)/sizeof(char);
for(int i=0;i<n;i++)
putchar(str[i]); //这里也可以使用printf("%c",str[i]);
putchar('\n');
printf("%s\n",str); //没有'\0'的字符数组不可以使用%s
3、小练习:逆序输出输入的字符串
方法一:不逆序字符串,直接逆序输出
#include<stdio.h>
#include<string.h>
int main()
{
char p[20];
gets(p); //字符串输入函数
int len=strlen(p);//获取字符串长度
int n=sizeof(p)/sizeof(char);
printf("len=%d,n=%d\n",len,n); //这里需要注意strlen和sizeof的区别,此时len=12,sizeof=20
for(int i=len-1;i>=0;i--) //使用for循环将其逆序输出
putchar(p[i]); //字符输出函数
return 0;
}
方法二:逆序字符串,正常输出
#include<stdio.h>
#include<string.h>
int main()
{
char p[20];
gets(p);
int len=strlen(p);
int i=0,j=len-1; //设置双指针,让字符串字符前后交换,达到字符串逆序的目的
printf("%d",len);
while(i<j) //左指针小于右指针则循环
{
char temp=p[i];
p[i]=p[j];
p[j]=temp; //交换p[i]和p[j]
i++;j--; //左指针往前,右指针往后
}
printf("%s",p); //输出字符串
return 0;
}
4、strlen和sizeof的区别
char str[10]="hello";
int len=strlen(str); //strlen不包含'\0'的字符串的长度
int n=sizeof(str); //sizeof包含'\0'的整个字符数组的长度
5、二维数组的遍历
二维字符数组:一行一个单词
char fruit[][10]={"apple","orange","pear"}; //可以不指定行数,但是必须指定列数
int n=sizeof(fruit)/sizeof(fruit[0]); //行数
int m=sizeof(fruit[0])/sizeof(char); //每行的字符个数
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
putchar(fruit[i][j]);
putchar('\n');
}
6、字符串函数
#include<string.h> //字符串函数的头文件
/*
1、字符串长度函数:strlen(str); 表示求字符串str的长度
2、字符串拷贝函数:strcpy(str1,str2); 表示将str2拷贝到str1中
3、字符串拷贝函数:strncpy(str1,str2,n); 表示将str2中的n个字符拷贝到str1中
4、字符串连接函数:strcat(str1,str2); 表示将str2拼接到str1后面
5、字符串连接函数:strncat(str1,str2,n); 表示将str2中的n个字符拼接到str1后面
6、字符串比较函数:strcmp(str1,str2); 将str1和str2逐个按ASCII码值比较,str1>str2返回1,str1=str2返回0,str1<str2返回-1
7、字符串比较函数:strncmp(str1,str2,n); 比较前n个字符
8、忽略大小写的字符串比较函数:strcasecmp(str1,str2);
9、查找指定字符:strchr(str,c);
10、查找指定字符串:strstr(str1,str2);
检查函数:
1、字符串是否为字母:isalpha(str);
2、字符串是否为大写字母:isupper(str);
3、字符串是否为小写字母:islower(str);
4、字符串是否为数字:isdigit(str);
此部分需要代码示例的话就给我评论留言,我可以补上一些例子代码!!!
*/