0
点赞
收藏
分享

微信扫一扫

C语言 字符串转换成int、long和double型

#include <stdio.h>
#include <stdlib.h>
#define LENGTH 128

int&nbsp;main(void){
char&nbsp;str[LENGTH];

puts(&quot;请输入字符串:&quot;);
scanf(&quot;%s&quot;,&nbsp;str);

printf(&quot;转换为int型后为&nbsp;%d。\n&quot;,&nbsp;atoi(str));

printf(&quot;转换为long型后为&nbsp;%ld。\n&quot;,&nbsp;atol(str));

printf(&quot;转换为double型后为&nbsp;%lf。\n&quot;,&nbsp;atof(str));

return&nbsp;0;
}

运行结果:
C语言 字符串转换成int、long和double型_未定义

使用函数库:#include <stdlib.h>

函数

原型

说明

返回值

atoi

int atoi(const char *nptr)

将 nptr 指向的字符串转换为 int 型表示

返回转换后的值。结果值不能用 int 型表示时的处理未定义

atol

long atol(const char *nptr)

将 nptr 指向的字符串转换为 long 型表示

返回转换后的值。结果值不能用 long型表示时的处理未定义

atof

double atof(const char *nptr)

将 nptr 指向的字符串转换为 double 型表示

返回转换后的值。结果值不能用 double 型表示时的处理未定义

atoi 函数实现:

int&nbsp;atoi(const&nbsp;char&nbsp;*nptr){
int&nbsp;flag&nbsp;=&nbsp;1;
int&nbsp;result&nbsp;=&nbsp;0;

if(nptr&nbsp;==&nbsp;NULL)
return&nbsp;0;
while(*nptr&nbsp;==&nbsp;&#39;&nbsp;&#39;&nbsp;||&nbsp;*nptr&nbsp;==&nbsp;&#39;\t&#39;)
nptr++;

if(*nptr&nbsp;==&nbsp;&#39;-&#39;){
flag&nbsp;=&nbsp;-1;
nptr++;
}

while(*nptr&nbsp;!=&nbsp;&#39;\0&#39;){
if(*nptr&nbsp;&gt;=&nbsp;0&nbsp;&amp;&amp;&nbsp;*nptr&nbsp;&lt;=&nbsp;&#39;9&#39;){
result&nbsp;=&nbsp;result*10&nbsp;+&nbsp;(*nptr&nbsp;-&nbsp;&#39;0&#39;);
}&nbsp;else&nbsp;{
break;
}
nptr++;
}

return&nbsp;result&nbsp;*&nbsp;flag;
}

atol 函数实现:

int&nbsp;atol(const&nbsp;char&nbsp;*nptr){
int&nbsp;flag&nbsp;=&nbsp;1;
long&nbsp;result&nbsp;=&nbsp;0;

if(nptr&nbsp;==&nbsp;NULL)
return&nbsp;0;
while(*nptr&nbsp;==&nbsp;&#39;&nbsp;&#39;&nbsp;||&nbsp;*nptr&nbsp;==&nbsp;&#39;\t&#39;)
nptr++;

if(*nptr&nbsp;==&nbsp;&#39;-&#39;){
flag&nbsp;=&nbsp;-1;
nptr++;
}

while(*nptr&nbsp;!=&nbsp;&#39;\0&#39;){
if(*nptr&nbsp;&gt;=&nbsp;0&nbsp;&amp;&amp;&nbsp;*nptr&nbsp;&lt;=&nbsp;&#39;9&#39;){
result&nbsp;=&nbsp;result*10&nbsp;+&nbsp;(*nptr&nbsp;-&nbsp;&#39;0&#39;);
}&nbsp;else&nbsp;{
break;
}
nptr++;
}

return&nbsp;result&nbsp;*&nbsp;flag;
}

atof 函数实现:

#include <stdio.h>
#define LENGTH 128
typedef&nbsp;enum{false,true}&nbsp;bool;

double&nbsp;atof(const&nbsp;char*&nbsp;nptr){
double&nbsp;result&nbsp;=&nbsp;0.0;
double&nbsp;d&nbsp;=&nbsp;10.0;
int&nbsp;count&nbsp;=&nbsp;0;

if(nptr&nbsp;==&nbsp;NULL){
return&nbsp;0;
}

while(*nptr&nbsp;==&nbsp;&#39;&nbsp;&#39;&nbsp;||&nbsp;*nptr&nbsp;==&nbsp;&#39;\t&#39;){
nptr++;
}

bool&nbsp;flag&nbsp;=&nbsp;false;

while(*nptr&nbsp;==&nbsp;&#39;-&#39;){&nbsp;&nbsp;

flag&nbsp;=&nbsp;true;
nptr++;
}

if(!(*nptr&nbsp;&gt;=&nbsp;&#39;0&#39;&nbsp;&amp;&amp;&nbsp;*nptr&nbsp;&lt;=&nbsp;&#39;9&#39;)){&nbsp;&nbsp;
return&nbsp;result;
}

while(*nptr&nbsp;&gt;=&nbsp;&#39;0&#39;&nbsp;&amp;&amp;&nbsp;*nptr&nbsp;&lt;=&nbsp;&#39;9&#39;){&nbsp;&nbsp;

result&nbsp;=&nbsp;result&nbsp;*&nbsp;10&nbsp;+&nbsp;(*nptr&nbsp;-&nbsp;&#39;0&#39;);
nptr++;
}

if(*nptr&nbsp;==&nbsp;&#39;.&#39;){&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;nptr++;
}

while(*nptr&nbsp;&gt;=&nbsp;&#39;0&#39;&nbsp;&amp;&amp;&nbsp;*nptr&nbsp;&lt;=&nbsp;&#39;9&#39;){&nbsp;&nbsp;
result&nbsp;=&nbsp;result&nbsp;+&nbsp;(*nptr&nbsp;-&nbsp;&#39;0&#39;)&nbsp;/&nbsp;d;
d&nbsp;*=&nbsp;10.0;
nptr++;
}

result&nbsp;=&nbsp;result&nbsp;*&nbsp;(flag&nbsp;?&nbsp;-1.0&nbsp;:&nbsp;1.0);

if(*nptr&nbsp;==&nbsp;&#39;e&#39;&nbsp;||&nbsp;*nptr&nbsp;==&nbsp;&#39;E&#39;){&nbsp;&nbsp;

flag&nbsp;=&nbsp;(*++nptr&nbsp;==&nbsp;&#39;-&#39;)&nbsp;?&nbsp;true&nbsp;:&nbsp;false;
if(*nptr&nbsp;==&nbsp;&#39;+&#39;&nbsp;||&nbsp;*nptr&nbsp;==&nbsp;&#39;-&#39;){
nptr++;
}

while(*nptr&nbsp;&gt;=&nbsp;&#39;0&#39;&nbsp;&amp;&amp;&nbsp;*nptr&nbsp;&lt;=&nbsp;&#39;9&#39;){
count&nbsp;=&nbsp;count*10&nbsp;+&nbsp;(*nptr&nbsp;-&nbsp;&#39;0&#39;);
nptr++;
}

if(flag&nbsp;==&nbsp;true)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
while(count&nbsp;&gt;&nbsp;0){
result&nbsp;=&nbsp;result&nbsp;/&nbsp;10;
count--;
}
}

if(flag&nbsp;==&nbsp;false){&nbsp;&nbsp;
while(count&nbsp;&gt;&nbsp;0){
result&nbsp;=&nbsp;result&nbsp;*&nbsp;10;
count--;
}
}
}
&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;result;
}

int&nbsp;main(void){
char&nbsp;str[LENGTH];

puts(&quot;请输入字符串:&quot;);
scanf(&quot;%s&quot;,&nbsp;str);

printf(&quot;转换为double型后为&nbsp;%f。\n&quot;,&nbsp;atof(str));

return&nbsp;0;
}


举报

相关推荐

0 条评论