c语言字符串转int类型 图示c语言字符串怎么转换int

C/C++语言中没有特殊的字符串变量,通常使用字符数组来存储字符串。字符串以""结尾。C/C++提供了丰富的字符串处理函数。下面是一些最常用的函数。
●字符串输出函数puts。●

本文最后更新时间:  2023-04-15 16:51:56

C/C++语言中没有特殊的字符串变量,通常使用字符数组来存储字符串。字符串以""结尾。C/C++提供了丰富的字符串处理函数。下面是一些最常用的函数。


●字符串输出函数puts。

●字符串输出函数gets。

●字符串连接函数strcat。

●字符串复制函数strcpy。

●字符串长度测量功能strlen。

字符串是面试考察相关知识的重点部分。通过考察string的相关知识,可以考察程序员的编程规范和编程习惯。而且包含了很多知识点,比如内存越界、指针和数组操作等。很多公司会要求应聘者写一个程序,在面试的时候复制字符串或者字符串的子字符串。本章列举了一些与字符串相关的面试问题,其中有些问题对编程技巧要求较高。

用数字字符串进行转换

求职时,数字和字符串之间的转换经常会出现问题。面试官用这些问题来考察应聘者的能力,比如是否熟悉常用的库函数、ASCII码以及字符串的存储格式。

将数字转换为字符串。面试示例1:使用库函数将数字转换成字符串。

考点:C库函数中把数字转换成字符串的用法。

出现频率:★★★

解析

c语言提供了几个标准库函数,可以转换任意类型的数字(整数、长整数、浮点等。)成串。下面是每个函数的方法及其描述。

● itoa():将整数值转换为字符串。

● ltoa():将长整型值转换为字符串。

● ultoa():将无符号长整型值转换为字符串。

● gcvt():将浮点数转换为字符串,并对其进行舍入。

● ecvt():将双精度浮点值转换为字符串,转换结果不含小数点。

● fcvt():指定位数为转换精度,其余同ecvt()。

还可以使用sprintf系列函数将数字转换成字符串,比itoa()系列函数要慢。下面的程序演示了如何使用itoa()函数和gcvt()函数:

程序输出结果:

str_int: 435

str_double: 435.10001

●代码第11行参数10表示按十进制类型进行转换,转换后的结果为“435”;如果按二进制类型进行转换,结果是“1101110011”。

●代码第12行的参数8表示精确的位数,这里得到的结果是“435.10001”。

回答

您可以使用atoi系列函数将数字转换为字符串。

面试示例2:不使用库函数将整数转换成字符串。

考点:将数字转换成字符串,了解相关ASCII码。

出现频率:★★★★

解析

如果不使用atoi或sprintf之类的库函数,可以通过加“0”的方式,将整数的每一位上的数字转换成char类型,存储在字符数组中。但是,需要注意的是,需要字符串的逆序。如以下过程所示:

程序中的int2str函数完成了int类型到字符串类型的转换。在代码第46行对int2str函数做了测试。程序的执行结果如下所示:程序中的int2str函数完成了从int类型到string类型的转换。int2str函数在代码的第46行进行了测试。程序的执行结果如下:

请输入整数:1234

输出:1234

如果输入是负数,程序执行结果如下:

请输入一个整数:-1234

输出:-1234

接下来分析int2str函数的实现。

●在代码的第9行,将参数n的绝对值赋给temp,然后在计算每一位的整数时使用temp,这样可以保证在负数的情况下不会有问题。

●代码第11 ~ 14行判断str的有效性,str不为空。

●在代码第15 ~ 19行的while循环中,N的每一位都存储在局部数组buf中,存储顺序与整数顺序相反。比如n是123456的整数,while循环结束后buf应该是“654321”。

●代码的第21行计算转换后的字符串的长度len。如果是负数,长度应该增加1。

●代码的第22 ~ 31行将数组buf中的非零元素反向复制到参数str指向的内存中。如果n为负,str指向的第一个内存存储负号。

将字符串转换为数字面试示例3:使用库函数将字符串转换为数字。

考点:C库函数中把字符串转换成数字的用法。

出现频率:★★★★

解析

与上一节将数字转换为字符串类似,C/C++语言提供了几个标准库函数,可以将字符串转换为任意类型(整型、长整型、浮点型等。).下面列出了每个函数的方法及其描述。

● atof():将字符串转换为双精度浮点值。

● atoi():将字符串转换为整数值。

● atol():将字符串转换为长整型值。

● strtod():将字符串转换为双精度浮点值,并报告所有无法转换的剩余数字。

● strtol():将字符串转换为长整型值,并报告所有无法转换的剩余数字。

●strtool():将字符串转换为无符号长整型值,并报告所有无法转换的剩余数字。

下面的程序演示了如何使用atoi()函数和atof()函数。

输出结果:

数量_整数:435

num_double: 436.55万

面试示例4:不使用库函数将字符串转换为数字。

考点:字符串转换成数字时对相关ASCII码的理解。

出现频率:★★★★

解析

程序代码如下:

程序执行结果:程序执行结果:

输入:1234

输出:1234

输入:-1234

输出:-1234

输入:+1234

输出:1234

程序中的str2int函数用于将字符串转换为整数。与例2中的int2str函数相比,该函数的转换过程更简单。它只需要做一个while循环(代码的第13行)来计算数值。如果结果是否定的,加一个负号。

C++字符串,数字转换

一、将CString转换为CTime的几种方法

CString timestr = & # 82202000年4月5日”;

int a,b,c;

sscanf(timestr。GetBuffer(timestr。GetLength()),”第%d年第%d月第%d天”,& amp一,& ampb &c);

CTimetime(a,b,c,0,0,0);

——–或者–———————

CString s(“2001-8-29 19:06:23”);

int nYear,nMonth,nDate,nHour,nMin,nSec

sscanf(s,“% d-% d-% d % d:% d:% d ”,& amp尼尔& ampn月& ampnDate &nHour &nMin &nSec);

CTime t(nYear,nMonth,nDate,nHour,nMin,nSec);

———或者————————

CString timestr = & # 82202000年4月5日”;

int年、月、日;

字节TT[5];

//获取年份

memset(tt,0,sizeof(TT));

TT[0]= timestr[0];

TT[1]= timestr[1];

TT[2]= timestr[2];

TT[3]= timestr[3];

year = atoi((char *)TT);

//获取月份

memset(tt,0,sizeof(TT));

TT[0]= timestr[6];

TT[1]= timestr[7];

month = atoi((char *)TT);

//获取日期

memset(tt,0,sizeof(TT));

TT[0]= timestr[10];

TT[1]= timestr[11];

CTimetime(年,月,日,0,0,0);

从上面可以明显看出,使用sscanf()函数有优势。

二。将CTIme转换为CString的方法:

CTime TMS can = CTime::GetCurrentTime();

CString szTime = tmScan。格式(“‘% Y-% M-% d % H:% M:% S ' ”);

产生的日期时间字符串基于”2006-11-27 23:30:59″格式。这样方便吗?

//获取CTime中的日期

CString cstrDate = tmScan。格式(“% Y-% m-% d ”);

//获取CTime中的时间

CString cstrTime = tmScan。格式(“% H:% M-% S ”);

Sprintf还有一个很好的表亲:strftime,专门用于格式化时间字符串。它的用法和她表姐很像,也是很多格式控制器。只是毕竟小姑娘谨慎,还得让打电话的人指定缓冲区的最大长度,大概是为了出了事可以推卸责任。这里有一个例子:

time _ t t = time(0);

//产生”YYYY-MM-DD hh:MM:ss ”字符串的格式。

char s[32];

strftime(s,sizeof(s),“% Y-% M-% d % H:% M:% S ”,本地时间(& ampt));

Sprintf也能在MFC: CString::Format中找到知音,strftime自然也有她在MFC: CTime::Format中的同道好友。这对赞助面向对象,用来写的代码更优雅。

三。字符串被转换为数字类型

会串”20.0E6 & # 8243转换成数字

1、sscanf(“20.0e5 & # 8243,”% d & # 8221,& ampx);

2、atof(“20.0E6 & # 8221);

很多人在这个“家族”中使用atoi()、atof()等函数。它们使用方便,但有一个重要的缺点:

转换失败后,转换字符串”0″都返回0,这使得一致性错误检查几乎不可能。为了完整起见,我们给出一小段代码:

代码:

——————————————————————————–

const char * str _ int = & # 8220777”;

const char * str _ float = & # 8220333.3”;

int I = atoi(str _ int);

float f = atof(str _ float);

——————————————————————————–

更好的方法:

稍微复杂和一致一点的方法是使用sscanf()

代码:

——————————————————————————–

const char * str _ int = & # 8220777”;

const char * str _ float = & # 8220333.3”;

int I;

浮动f;

if(EOF == sscanf(str_int,“% d & # 8221,& ampi)){

//错误

}

if(EOF == sscanf(str_float,“% f & # 8221,& ampf)){

//错误

}

——————————————————————————–

因为sscanf()采用const char*参数,所以可以直接使用CString:

因为sscanf()使用const char*作为参数,所以可以直接使用CString作为参数:

代码:

——————————————————————————–

CString str _ int(“777”);

if(EOF == sscanf(str_int,“% d & # 8221,& ampi)){

//错误

}

——————————————————————————–

小心格式描述符(如本例”% d & # 8221)。Sscanf()无法检查格式描述符是否与传递的变量类型相匹配。如果不匹配,会得到意想不到的结果。还要注意,sscanf()可以一次从一个字符串中提取一个或多个数值。

++方法

以下示例显示了使用标准C++类来完成此任务的模板函数。

代码:

——————————————————————————–

四。int char * float和CStringCovernt

1 .int & lt->CString

1)int->;CString

int n = 1;

CString字符串;

海峡。格式(“% d & # 8221,n);

2)CString->(同Internationalorganizations)国际组织

CString str = & # 82201”;

int n = atoi(str。get buffer(0));

2。char*和CString

1)char *->CString

char SZ[128];

CString字符串;

海峡。格式(“% s & # 8221,SZ);

2)CString->字符*

CString字符串;

//int nLength = str。GetLength();

char* sz = str。get buffer(0);

3。float & lt->CString

1)浮动->;CString

浮点f = 0.0

CString字符串;

海峡。格式(“% f & # 8221,f);

2)CString->漂浮物

CString str = & # 82200.0”;

float f = atof(str。get buffer(0));

温馨提示:内容均由网友自行发布提供,仅用于学习交流,如有版权问题,请联系我们。