
如何把char型字符转换为int/double类型数字
例如:charx;cin>>x;运行后输入:123+345如何输出468不要告诉我intx,y;charop;cin>>x>>op>>y;之类。我是想使用类似atoi函数...
例如:
char x;
cin>>x;
运行后输入:123+345
如何输出468
不要告诉我int x,y;char op;cin>>x>>op>>y;之类。
我是想使用类似atoi函数,这个的具体应用我不太了解。
例如我输入一串字符:asd1234df
然后回车
如何提取出其中的1234?
并且这1234代表的是一千二百三十四
不用函数的话,我想到一个极其麻烦的方法。
就是从字符最后一位开始,或者第一位
利用for循环,不知道有没有简易方法。
另外,如果用for循环的话,如何确定输入的位数。是否应用string?
希望哪位大大能够给出答案,谢谢。 展开
char x;
cin>>x;
运行后输入:123+345
如何输出468
不要告诉我int x,y;char op;cin>>x>>op>>y;之类。
我是想使用类似atoi函数,这个的具体应用我不太了解。
例如我输入一串字符:asd1234df
然后回车
如何提取出其中的1234?
并且这1234代表的是一千二百三十四
不用函数的话,我想到一个极其麻烦的方法。
就是从字符最后一位开始,或者第一位
利用for循环,不知道有没有简易方法。
另外,如果用for循环的话,如何确定输入的位数。是否应用string?
希望哪位大大能够给出答案,谢谢。 展开
5个回答
展开全部
在stdlib.h中有个函数itoa(),可以实现这个功能:
itoa的用法:
itoa(i,num,10);
i 需要转换成字符的数字
num 转换后保存字符的变量
10 转换数字的基数(进制)10就是说按照10进制转换数字。还可以是2,8,16等等你喜欢的进制类型
原形:char *itoa(int value, char *string, int radix);
再给个实例吧:
#include "stdlib.h"
#include "stdio.h"
main()
{
int i=1234;
char s[5];
itoa(i,s,10);
printf("%s",s);
getchar();
}
itoa的用法:
itoa(i,num,10);
i 需要转换成字符的数字
num 转换后保存字符的变量
10 转换数字的基数(进制)10就是说按照10进制转换数字。还可以是2,8,16等等你喜欢的进制类型
原形:char *itoa(int value, char *string, int radix);
再给个实例吧:
#include "stdlib.h"
#include "stdio.h"
main()
{
int i=1234;
char s[5];
itoa(i,s,10);
printf("%s",s);
getchar();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
运行环境 VC++2008
#include <stdio.h>
#include <string.h>
int todigit(char*str1);
int main()
{
char str[50];
char* a,*b;
char*token,*next;
int tick=0;
char*op;
fgets(str,50,stdin); //读取输入的一行
token = strtok_s(str,"+",&next); //以+为分割符,分别取出 前后字符串
while(token)
{
if(tick == 0)
{
a = token;
tick = 1;
}
else if(tick == 1)
{
b = token;
tick = 0;
}
token = strtok_s( NULL, "+", &next);
}
printf("%d\n",todigit(a)+todigit(b));//todigit 把分出来的两个字符串进行int化
return 0;
}
int todigit(char*str1)
{
int i=0;
int j=0;
char str2[50];
while(1)
{
if(str1[i] >= 30 && str1[i] <= 57) //判断每个字符是否在 0~9之间
{
str2[j] = str1[i];
j++;
}
else if(str1[i] == '\0')
break;
i++;
}
return atoi(str2);
}
--------------------
运行: aa100bb + bb100dd
结果:200
目前只能计算 +
想要处理 四则,要加入对 + - * / 判断。
代码就变得长了。
#include <stdio.h>
#include <string.h>
int todigit(char*str1);
int main()
{
char str[50];
char* a,*b;
char*token,*next;
int tick=0;
char*op;
fgets(str,50,stdin); //读取输入的一行
token = strtok_s(str,"+",&next); //以+为分割符,分别取出 前后字符串
while(token)
{
if(tick == 0)
{
a = token;
tick = 1;
}
else if(tick == 1)
{
b = token;
tick = 0;
}
token = strtok_s( NULL, "+", &next);
}
printf("%d\n",todigit(a)+todigit(b));//todigit 把分出来的两个字符串进行int化
return 0;
}
int todigit(char*str1)
{
int i=0;
int j=0;
char str2[50];
while(1)
{
if(str1[i] >= 30 && str1[i] <= 57) //判断每个字符是否在 0~9之间
{
str2[j] = str1[i];
j++;
}
else if(str1[i] == '\0')
break;
i++;
}
return atoi(str2);
}
--------------------
运行: aa100bb + bb100dd
结果:200
目前只能计算 +
想要处理 四则,要加入对 + - * / 判断。
代码就变得长了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
原型: int atoi(const char *nptr);
需要用到的头文件: #include <stdlib.h>
程序例:
1)
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int n;
char *str = "12345.67";
n = atoi(str);
printf("string = %s integer = %d\n", str, n);
return 0;
}
执行结果
string = 12345.67 integer = 12345
2)
#include <stdlib.h>
#include <stdio.h>
int main()
{
char a[] = "-100" ;
char b[] = "123" ;
int c ;
c = atoi( a ) + atoi( b ) ;
printf("c = %d\n", c) ;
return 0;
}
执行结果
c = 23
简单的实现atoi函数的源代码:
int my_atoi(const char *str){
int result;
int signal = 1; /* 默认为正数 */
if((*str>='0'&&*str<='9')||*str=='-'||*str=='+'){
if(*str=='-'||*str=='+'){
if(*str=='-')
signal = -1; /* 输入负数 */
str++;
}
}
else return 0;
/* 开始转换 */
while(*str>='0'&&*str<='9')
result = result*10+(*str++ -'0');
return signal*result;
}
需要用到的头文件: #include <stdlib.h>
程序例:
1)
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int n;
char *str = "12345.67";
n = atoi(str);
printf("string = %s integer = %d\n", str, n);
return 0;
}
执行结果
string = 12345.67 integer = 12345
2)
#include <stdlib.h>
#include <stdio.h>
int main()
{
char a[] = "-100" ;
char b[] = "123" ;
int c ;
c = atoi( a ) + atoi( b ) ;
printf("c = %d\n", c) ;
return 0;
}
执行结果
c = 23
简单的实现atoi函数的源代码:
int my_atoi(const char *str){
int result;
int signal = 1; /* 默认为正数 */
if((*str>='0'&&*str<='9')||*str=='-'||*str=='+'){
if(*str=='-'||*str=='+'){
if(*str=='-')
signal = -1; /* 输入负数 */
str++;
}
}
else return 0;
/* 开始转换 */
while(*str>='0'&&*str<='9')
result = result*10+(*str++ -'0');
return signal*result;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你可以试试sscanf()函数,功能很强大的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
运行环境
VC++2008
#include
<stdio.h>
#include
<string.h>
int
todigit(char*str1);
int
main()
{
char
str[50];
char*
a,*b;
char*token,*next;
int
tick=0;
char*op;
fgets(str,50,stdin);
//读取输入的一行
token
=
strtok_s(str,"+",&next);
//以+为分割符,分别取出
前后字符串
while(token)
{
if(tick
==
0)
{
a
=
token;
tick
=
1;
}
else
if(tick
==
1)
{
b
=
token;
tick
=
0;
}
token
=
strtok_s(
NULL,
"+",
&next);
}
printf("%d\n",todigit(a)+todigit(b));//todigit
把分出来的两个字符串进行int化
return
0;
}
int
todigit(char*str1)
{
int
i=0;
int
j=0;
char
str2[50];
while(1)
{
if(str1[i]
>=
30
&&
str1[i]
<=
57)
//判断每个字符是否在
0~9之间
{
str2[j]
=
str1[i];
j++;
}
else
if(str1[i]
==
'\0')
break;
i++;
}
return
atoi(str2);
}
--------------------
运行:
aa100bb
+
bb100dd
结果:200
目前只能计算
+
想要处理
四则,要加入对
+
-
*
/
判断。
代码就变得长了。
VC++2008
#include
<stdio.h>
#include
<string.h>
int
todigit(char*str1);
int
main()
{
char
str[50];
char*
a,*b;
char*token,*next;
int
tick=0;
char*op;
fgets(str,50,stdin);
//读取输入的一行
token
=
strtok_s(str,"+",&next);
//以+为分割符,分别取出
前后字符串
while(token)
{
if(tick
==
0)
{
a
=
token;
tick
=
1;
}
else
if(tick
==
1)
{
b
=
token;
tick
=
0;
}
token
=
strtok_s(
NULL,
"+",
&next);
}
printf("%d\n",todigit(a)+todigit(b));//todigit
把分出来的两个字符串进行int化
return
0;
}
int
todigit(char*str1)
{
int
i=0;
int
j=0;
char
str2[50];
while(1)
{
if(str1[i]
>=
30
&&
str1[i]
<=
57)
//判断每个字符是否在
0~9之间
{
str2[j]
=
str1[i];
j++;
}
else
if(str1[i]
==
'\0')
break;
i++;
}
return
atoi(str2);
}
--------------------
运行:
aa100bb
+
bb100dd
结果:200
目前只能计算
+
想要处理
四则,要加入对
+
-
*
/
判断。
代码就变得长了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询