c/c++整理--字符串(1)

本文介绍了C语言中数字与字符串互相转换的标准库函数及其使用方法,包括itoa、ltoa、gcvt等用于数字转字符串,以及atof、atoi、atol等用于字符串转数字的函数。此外还提供了不使用库函数的手动转换示例,以及strcpy和memcpy函数的实现与区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、使用库函数将数字转化为字符串

C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字任意转化为字符串。
(1)itoa():  整型     转化为      字符串
(2)ltoa():  长整型    转化为      字符串
(3)ultoa():无符号长整型 转化为      字符串
(4)gcvt(): 浮点型    转化为      字符串
(5)ecvt(): 双精度浮点型 转化为      字符串,结果中不包含十进制小数点
(6)fcvt():  以指定位数为转换精度,其余同ecvt()
(7)sprintf():可以将任意数字类型转化为字符串,但是其速度较上面函数慢。

在Centos上man搜了一下,itoa、ltoa和ultoa在Centos6.7中并不存在,也就是说gcc编译器无法识别这三个函数。另外几个都有。
       #include <stdlib.h>
       char *gcvt(double number, size_t ndigit, char *buf);
       char *ecvt(double number, int ndigits, int *decpt, int *sign);
       char *fcvt(double number, int ndigits, int *decpt, int *sign);
       int sprintf(char *str, const char *format, ...);

二、使用库函数将字符串转换为数字

和上面类似,C语言也提供了几个标准库函数,可以将字符串转换为任意类型的数字。
(1)atof():    字符串  转换为  双精度浮点型型
(2)atoi():    字符串  转换为  整型
(3)atol():    字符串  转换为  长整型
(4)strtod(): 字符串  转换为  双精度浮点型,并报告不能被转换的所有剩余数字。
(5)strtol():  字符串  转换为  长整型,并报告不能被转换的所有剩余数字。
(6)strtoul():字符串  转换为  无符号长整型,并报告不能被转换的所有剩余数字。

       #include <stdlib.h>
       double atof(const char *nptr);

       int        atoi(const char *nptr);
       long     atol(const char *nptr);
       double strtod(const char *nptr, char **endptr);
       long int strtol(const char *nptr, char **endptr, int base);      
       unsigned long int strtoul(const char *nptr, char **endptr, int base);

三、不使用库函数将字符串转化为数字

#include <iostream>

using namespace std;

int strtoint(char *str)
{
	if(str == NULL)				//函数入口参数检查
	{
		return 0;
	}
	
	const char *pstr = str;
	int temp;					//临时存放转换后的数据
	
	if(str[0] == '+' || str[0] == '-')		//第一位为+/-时,先看后面的
	{
		str++;
	}
	
	while(*str)								//遍历字符串,如果字符在0~9,则转化
	{
		if(*str < '0' && *str > '9')
		{
			break;
		}
		temp = temp*10 + *str - 48; 
		str++;
	}
	if(pstr[0] == '-')				//如果以‘-’开头,取反
	{
		temp = -temp;
	}
	return temp;
}

int main()
{
	char str[20];
	cin.getline(str, 20);
	cout<<strtoint(str)<<endl;
	
	return 0;
} 



四、编程实现strcpy函数

strcpy函数原型:
char *strcpy(char *dest, const char *src);

#include <stdio.h>

void my_cpy(char* str1, char* str2)
{
	if(str1 == NULL || str2 == NULL)	//函数入口参数检查
	{
		return;
	}
	
	while((*str1++ = *str2++) != '\0');	//将str2的所有内容复制到str1中
	return;
}

int main()
{
	char str1[] = "hello";
	char str2[] = "world";
	my_cpy(str1, str2);
	
	printf("%s\n%s\n", str1, str2);
	
	return 0;
} 



五、编程实现memcpy函数

内存复制的实现
#include <stdio.h>
#include <assert.h>

void my_memcpy(char* memto, const char* memfrom, size_t size)
{
	assert((memto != NULL) && (memfrom != NULL));		//入口参数检查
	char *tempfrom = memfrom;
	char *tempto = memto;
	
	while(size-- > 0)
	{
		*tempto++ = *tempfrom++;
	}
}

int main()
{
	char str1[] = "hello world";
	char str2[20] = "";
	my_memcpy(str2, str1, 4);
	str2[4] = '\0';
	
	printf("%s\n", str2);
	
	return 0;
} 

memcpy函数有选择性的复制字符串中的字符。程序中复制了str1的前四个字符。


六、strcpy与memcpy的区别

区别:
(1)复制的内容不同。strcpy只能复制字符串,memcpy可以复制任意内容,如字符串、整型、结构体和类等。
(2)复制的方法不同。strcpy不需要指定长度,它是遇到‘\0’结束的,memcpy是有其第三个参数决定。
(3)用途不同。通常在复制字符串时用strcpy,其他数据类型用memcpy。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值