【经验】C语言常见写法

因为复试要用C语言进行复试,导致C++没法用了,好头疼啊,明明有好用的工具写算法但是C就没法用了,因为c已经忘得差不多了,所以在这里总结一下C的一些经验,开启一下尘封的回忆

创建数组并赋初值

int a[10];	//这里是创建数组时不赋初值,数组的元素为随机数
int a[10]=0;	//这种写法在C++是可以的,但是在C就会运行出错
int a[10]={0};	//C中要用这种写法

获取数组长度

#include 	//头文件
int m = strlen(s);

关于c++中的string

c语言并没有string类型
需要用char数组来实现

#include
#include
#include
int main(){
	char s[]="123456";
	printf("%d %s\n%d",strlen(s),s,sizeof(s));
}
//输出是
6 123456
7

memset函数

用于设置数组的值

#include 

int main() {
    int arr[10];
    memset(arr, 0, sizeof(arr));
    // 现在数组 arr 中的所有元素都被设置为0了
    return 0;
}

void *memset(void *ptr, int value, size_t num);

ptr 是要设置的内存块的起始地址。
value 是要设置的值,通常是一个整数,表示要用来设置内存的值(例如,0 表示将内存块设置为0)。
num 是要设置的字节数,即要设置的内存块的大小。

*s

代表指向数组第一个元素的指针

string.h常用函数

#include
#include

int main(){
	char a[30]="Hello World!";		//char* a和char *a是一样的 但是与a[]="hello"不同 
	//char *a创造出来的字符串是常量,无法修改
	//a[] 创造出来的是变量 可以修改 
	printf("alenth:%d\na sizeof a:%d\n",strlen(a),sizeof(a));		//输出字符串长度 
	char b[]="My name is Sty!";
	printf("b lenth:%d\nsizeof b:%d\n\n",strlen(b),sizeof(b));

	strcat(a,b);		//拼接字符串 
	// char* strcat(char* destination, const char* source)
	//将source拷贝到destination后,并返回destination的首字母指针 
	//不需要返回值
	//这里仅修改的是a,b并未做出修改,所以a必须用a[]创建而不能用*a,b都可以 
	/*
	具体流程为
	1.寻找目标字符串的结束:

	strcat 会遍历目标字符串 dest,直到找到字符串的末尾(即 null 终止符 \0)的位置。
	2。复制源字符串:

	从目标字符串 dest 的末尾开始,strcat 开始复制源字符串 src 的内容,直到遇到源字符串的末尾(即 null 终止符 \0)。
	3.添加 null 终止符:

	一旦复制完成,strcat 在连接后的字符串的末尾添加一个 null 终止符 \0,确保连接后的字符串正确终止。
	返回指向目标字符串的指针:

s	trcat 返回一个指向目标字符串 dest 的指针,该指针指向连接后的字符串的起始位置。 
	*/ 
	printf("strcat:\na lenth:%d\nsizeof a:%d\na: %s\n\n",strlen(a),sizeof(a),a); 
	

	//strcpy
	char c[50]="";		//创造一个空的字符串 
	strcpy(c,a);
	//char* strcpy(char* destination, const char* source)
	//将a的内容拷贝入c 
	printf("strcpy:\nc:%s\n\n",c);
	
	
	
	//strstr
	printf("strstr\n");
	char* d=strstr(a,b);
	printf("a: %s\n", a);
	printf("b: %s\n", b);

	if(d)
		printf("%s\n",d);
	else
		printf("NULL\n");
	
	
	printf("strtok\n");
	char* e = strtok(a,"!");
	printf("a: %s\n",a);		//上面的代码已经把a给拆了 
	while(e!=NULL){
	 	printf("%s\n",e);
	 	e = strtok(NULL,"!");
	}
	 /*
	 在第二次及之后的调用中,如果你再次传入要拆分的字符串 str,strtok 会从头开始扫描,
	 而不是继续从上一次停止的位置。
	 为了让 strtok 继续从上一次停止的位置开始扫描,你需要将 str 参数设置为 NULL。
	 */
	printf("-----------------------\n");
	char *f = strchr(a,'e');
	printf("a: %s\n",a);
	printf("%d\n",f-a);
	
}

stdlib atoi sprintf sscanf

#include
#include

int main(){
	char a[50] = "123a45a";
	//这样会直接截断到123 碰到第一个无法执行的地方就自动结束了 
	int b = atoi(a);
	printf("b:%d\n",b);
	
	
	
	//sprintf和sscanf永远是第一个参数是char 第三个参数是int类型
	char str[50];
	sprintf(str,"%d",b);
	printf("str:%s\n",str); 
	
	int c;
	int count;
	count = sscanf(str,"%d",&c);
	
	
	//sscanf除了%s以外都要加& 
	if(count==1)	printf("c:%d\n",c);
	else	printf("NULL\n");
	char d[50]="Jone 19 2.7";
	char name[50];
	int age;
	double grade; 
	int count1 = sscanf(d,"%s %d %lf",name,&age,&grade);
	if(count1==3)	printf("name:%s\nage:%d\ngrade:%.2lf\n",name,age,grade);
	else	printf("NULL\n");
}

memset只能赋值0

C语言表示int最大值用INT_MAX

#include 	//头文件

你可能感兴趣的:(学习经验,c语言,算法)