C语言笔记第十二天

两个指针相加无意义

指针相减可以可到元素个数

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值