两个指针相加无意义
指针相减可以可到元素个数
int arr[3][4],(*p)[4] 其中arr和p是等价的
字符串转换
#include <stdio.h>
#include <stdlib.h>
void stringTransition();
int myAtoi(char* str);
int main()
{
stringTransition();
char* str = "1111";
printf("%d\n", myAtoi(str)); //1111
return 0;
}
void stringTransition()
{
char* str = "1111";
char* str2 = "22222";
char* str3 = "33.33";
int num = atoi(str);
long num2 = atol(str2);
float num3 = atof(str3);
printf("%d\n", num); //111
printf("%ld\n", num2); //22222
printf("%.2f\n", num3); //33.33
}
int myAtoi(char* str)
{
int sum = 0;
while (*str != '\0' && (*str >= '0' && *str <= '9'))
{
//字符'0'-'0' 就是数字0 1就是1
//乘10 就是每次进一位
sum = sum * 10 + *str - '0';
str++;
}
return sum;
}
字符串切割
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
//#include <string.h>
//char* strtok(char* str1, const char* str2);
//功能:函数返回字符串str1中紧接“标记”的部分的指针, 字符串str2是作为标记的分隔符。如果分隔标记没有找到,函数返回NULL。为了将字符串转换成标记,第一次调用str1 指向作为标记的分隔符。之后所以的调用str1 都应为NULL。
//这个介绍的好麻烦
//其实就是把找到的字符替换为'\0',然后传入一次之后,需要再次使用时第一个源串传NULL就可以
//
//这种实现都很简单也只是在笔试的时候有那么一丢丢几率能出现,即使出现伪代码嘛.逻辑没问题就可以
//第二个参数可以时多个字符,依次寻找切割
int main()
{
char str[] = "abcd*efghi*jklm*nopqrs*tuv*wxyz";
char* result = NULL;
result = strtok(str, "*");
printf("%s\n", result);
while (result = strtok(NULL, "*"))
{
printf("%s\n", result);
}
return 0;
}
sprint
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
//printf 标准输出
//sprintf 输出到字符串
//fprintf 输出到文件
int main()
{
char* name = "小明";
int age = 18;
int height = 180;
char result[1024] = "";
sprintf(result, "姓名:%s\n年龄:%d\n身高:%d\n", name, age, height);
printf("%s", result);
return 0;
}
sscanf
这个如果一个个试对我本人来说实在是件特无意义的事情,所以就没有分开细写
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
//%s提取字符串,%d提取数字 %数字s提取几个字符,%d提取几个数字
//%[a-z]提取a-z
//%*s跳过字符串,%*d跳过数字 %数字s跳过几个字符,%d跳过几个数字
//%[^a-z]跳过a-z
int main()
{
char* str = "sdfdaf@163.com";
char name[1024] = "";
char logo[1024] = "";
sscanf(str, "%[^@]%*1s%[^.]", name, logo);
printf("%s\n%s\n", name, logo);
return 0;
}