1.memset 对数组中每一个元素赋相同的值
使用memeset要在程序开头添加 string.h 头文件,只建议用其来赋0或者-1
如果要对数组赋其他值,使用fill函数(第六章)
memset使用格式:memset(数组名,初值,sizeof(数组名))
memset(a,-1,sizeof(a));
for(int i=0;i<5;i++){
printf("%d ",a[i]);
}
2.字符数组
字符数组初始化
方法一: 一个一个字符赋值
#include
int main(){
char str[15]={'g','o','o','d',' ','j','o','b'};
for(int i=0;i<10;i++){
printf("%c",str[i]);
}
return 0;
}
方法二:字符数组也可以通过直接赋值字符串来初始化(仅限于初始化。其他位置不允许这样直接赋值)
char str[15]={"good job"};
字符数组的输入输出
scanf 和 printf
#include
int main(){
// char n;
char str[10];
scanf("%s",str);
// scanf("%c",&n);
printf("%s\n",str);
// printf("%c\n",n);
return 0;
}
scanf 对字符类型有两种形式: %c 和 %s
%c是单个字符,可以输出 空格
%s是字符串,以空格为结束标志
getchar 和 putchar
用来输入输出单个字符
#include
int main(){
char str[5][5];//5行5列的数组范围,但实际用不到这么多也可以
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
str[i][j]=getchar();
}
getchar();//把输入每行末尾的换行符吸收掉 (针对i循环来说)
}
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
putchar(str[i][j]);
}
putchar('\n');//一个i大循环结束后换行
}
return 0;
}
注意:输入每一轮(行)结束时要用getchar()来吸收空格。
输出每一轮(行)结束时换行要用putchar('\n') , 注意是单引号。
gets 和 puts
用来输入输出一行字符串,将其存放在(输出)在一维数组或二维数组的一维中。
#include
int main(){
char str 1[20];
char str 2[5][10];
gets(str 1);//将第一个字符串存入字符数组str1
for(int i=0;i<3;i++){
//通过for循环,将后三个字符串存入str 2[0] ,str 2[1],str 2[2]
gets(str 2[i]);
}
puts(str 1);
for(int i=0;i<3;i++){
puts(str 2[i]);
}
return 0;
}
字符数组的存放方式
开字符数组的时候至少比实际长度多1,因为又结束符"\0"
3.string.h头文件 包含了很多字符数组的函数
strlen() 获得字符数组的长度(注意空格长度为1)
格式: strlen(数组名)
#include
#include
int main(){
char str[10];
gets(str);
int len=strlen(str);
printf("%d\n",len);
return 0;
}
strcmp() 函数:返回两个字符串大小,按照字典序比较(例如a的字典序是32)
strcmp(字符数组1,字符数组2)
返回结果:
strcpy() 函数:把一个字符串赋值给另一个字符串(包含结束符 '\0' )
格式: strcpy(字符数组1,字符数组2) //把数组2的值赋值给数组1
strcat() 函数: 把一个字符串接到另一个字符串后面
格式: strcat(字符数组1,字符数组2) //把字符数组2接到字符数组1后面
sscanf 和 sprintf 是处理字符串问题的利器
sscanf(str,"%d",&n); //把字符数组str中的内容以 %d 的格式写入到n 从前往后赋值
sprintf(str,"%d",n); //把 n 以%d 的格式写入到str字符数组中 从后往前赋值
sscanf 例:不要忘了是两个s
#include
int main(){
int n;
char str[100]="123";
sscanf(str,"%d",&n);
printf("%d\n",n);
return 0;
}
sprintf 例: sprintf 好像是一个存储作用,把数据存到str数组后,最终还是要printf输出
int main(){
int n=2333;
char str[100];
sprintf(str,"%d",n);
printf("%s\n",str);
return 0;
}
加强版sscanf例子:
#include
int main(){
int n;
double db;
char str[100]="2048:3.14:hello";
char str2[100];
sscanf(str,"%d:%lf,%s",&n,&db,str2);
printf("n=%d,db=%.2f,str2=%s\n",n,db,str2);
return 0;
}
加强版sprintf 例子:
#include
int main(){
int n=12;
double db=3.1415;
char str[100],str2[100]="good";
sprintf(str,"%d:%.2f,%s",n,db,str2);
printf("str=%s\n",str);
return 0;
}