《算法笔记》基础知识汇总(3)

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;
}

 《算法笔记》基础知识汇总(3)_第1张图片

疑问:怎么输出单个字符后再输出字符串???

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)

返回结果:

《算法笔记》基础知识汇总(3)_第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;
}

《算法笔记》基础知识汇总(3)_第3张图片程序有问题,那个hello这么回事???

 

加强版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;
}

 

 

 

你可能感兴趣的:(PAT,Basic,Level)