因为复试要用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 //头文件