字符串:
是一串字符,也是一个以'\0'结尾的字符数组
#include<stdio.h>
int main(){
//定义及初始化
char arr[]="abc";
char arr1[]={'a','b','c','\0'};
char arr2[]="abc0"; //0会输出 0表示字符
char arr3[]={'a','b','c',0};
printf("%s,%s,%s,%s\n",arr,arr1,arr2,arr3); //运行结果:abc,abc,abc0,abc
return 0;
}
赋值:strcpy
//strcpy的用法,strcpy用于赋值
#include<stdio.h>
#include <string.h>
int main(){
char arr[8];
strcpy(arr,"ehfue");
for (int i=0; i<8; i++) {
printf("%c",arr[i]);
}
printf("\n");
return 0;
}
特点:
1.后面必须有'\0'结尾.否则只算普通字符数组,但'\0'不会输出,只表示字符串结束.
2.字符串输出占位用%s必须遇到\0.才能结束.否则会继续输出更高位地址值的字符.
#include <stdio.h>
int main(){
char s[]="abc";
char s1[]={'a','b','c'};
char s2[]="haha";
printf("s=%s,s1=%s1,s2=%s\n",s,s1,s2); //运行结果:s=abc,s1=abcabc1,s2=haha
printf("%lu\n",sizeof s); //运行结果:4
return 0;
}
3.strlen函数用于计算一个字符串的长度(字符数量),使用必须引入<string.h>.
4.strlen不会计算\0.且碰到\0结束,但是sizeof不受\0的影响,且长度会包含\0;
#include <stdio.h>
#include <string.h>
int main(){
char s[]="abc";
int a=strlen(s); //不计算\0
int b=sizeof(s); //计算\0
printf("a=%d,b=%d\n",a,b); //运行结果:a=3,b=4
return 0;
}
注意:中文字符=3个英文字符
5.字符串一定是字符数组,但字符数组不一定是字符串.
字符串数组是一个二维数组.
练习
//定义一个字符串数组,并打印所有字符串
#include <stdio.h>
int main(){
char arr[3][10]={"adbd","dfjie","dfjie"};
for (int i=0; i<3; i++) {
printf("%s\n",arr[i]);
}
}
//编写一个函数,判断一个字符串中是否包含某个字符,包含返回1,不包含返回0(用两种方法);
//方法一:
#include <stdio.h>
#include <string.h>
int isHasChar(char arr[],char c);
int main(){
char arr[]="dfiejsof";
char a='m';
int d=isHasChar(arr,a);
printf("%d\n",d);
}
int isHasChar(char arr[],char c){
int result=0;
for (int i=0; i<strlen(arr); i++) {
if (arr[i]==c) {
result=1;
break;
}
}
return result;
}
//方法二:
#include <stdio.h>
#include <string.h>
int isHasChar(char arr[],char c);
int main(){
int i=0;
char arr[]="dfiejsof";
char a='d';
int d=isHasChar(arr,a);
printf("%d\n",d);
}
int isHasChar(char arr[],char c){
int i=0;
while (i<strlen(arr)) { //判断可以为arr[i]!=0或arr[i]!='\0'
if (arr[i]==c) {
return 1;
}
i++;
}
return 0;
}