输入一串由数字与运算符组成的字符串,请将字符串中的数字和运算符分割开分别储存在两个数组中
答案:3 悬赏:0
解决时间 2021-03-03 00:55
- 提问者网友:呐年旧曙光
- 2021-03-02 01:46
输入一串由数字与运算符组成的字符串,请将字符串中的数字和运算符分割开分别储存在两个数组中
最佳答案
- 二级知识专家网友:你哪知我潦倒为你
- 2021-03-02 02:51
#include
#include
#include
int main(void)
{
const char *ss = "12.5+31.66*88.95/56.54%26.77-19.94"; //测试数组;
const size_t len = strlen(ss);
char num[len+1] = {0}; //储存数字(包含小数);
char sym[len+1] = {0}; //储存运算符号;
for(int i = 0, j = 0, k = 0; i < len + 1; ++i)
{
if(isdigit(ss[i]) || ss[i] == '.')
num[j++] = ss[i];
else
{
num[j++] = ' ';
sym[k++] = ss[i];
}
}
printf("%s
%s
",num,sym);
return 0;
}追答
追问:不是的不过还是谢谢啦
追答:那你要怎样的?直接变成数字的?
追问:一串浮点型常数和运算符的字符串分开浮点型常数和运算符分别存入两个数组中
追答:#include
#include
#include
#include
int main(void)
{
char ss[] = "12.5+31.66*88.95/56.54%26.77-19.94"; //测试数组;
const size_t len = strlen(ss);
char num[len+1] = {0}; //储存数字字符;
char sym[len+1] = {0}; //储存运算符号;
double number[len] = {0}; //储存小数;
for(int i = 0, j = 0, k = 0; i < len + 1; ++i)
{
if(isdigit(ss[i]) || ss[i] == '.')
num[j++] = ss[i];
else
{
num[j++] = ' ';
sym[k++] = ss[i];
}
}
int i = 0;
char *p1 = num;
char *p2 = NULL;
while(1)
{
number[i++] = strtod(p1,&p2);
if(p1 == p2)
break;
p1 = p2;
}
for(int i = 0; number[i] != 0; ++i)
printf("%lf ",number[i]);
printf("
%s
",sym);
return 0;
}
全部回答
- 1楼网友:走死在岁月里
- 2021-03-02 05:30
很简单呀,分分钟追答
追问:大神求教大神能给点提示吗 我会感激不尽的
追答:字符串逐个扫描呀,和把一个字符串里面所有英文单词打印出来一回事
追问:现在主要的问题是 我不知道如何分割出浮点型的常数和运算符 是要调用高数吗?是要调用函数吗?求指教
追答:有个函数叫atof,你去查一下
追问:用过了我的程序然后直接就出问题了
追答:不能直接去转的,要先拆分
追问:我用的就是循环结构分别去判断然后才用的可是结果不对
追答:调用atof的字符串最后加字符串结束标记了么?
追问:大神求教大神能给点提示吗 我会感激不尽的
追答:字符串逐个扫描呀,和把一个字符串里面所有英文单词打印出来一回事
追问:现在主要的问题是 我不知道如何分割出浮点型的常数和运算符 是要调用高数吗?是要调用函数吗?求指教
追答:有个函数叫atof,你去查一下
追问:用过了我的程序然后直接就出问题了
追答:不能直接去转的,要先拆分
追问:我用的就是循环结构分别去判断然后才用的可是结果不对
追答:调用atof的字符串最后加字符串结束标记了么?
- 2楼网友:我住北渡口
- 2021-03-02 04:09
首先你把字符串都看成字符,
第二,数字的字符是有限的:0-9 .
第三,运算符和数字是一样的。
按字符把运算符分开就可以了
第二,数字的字符是有限的:0-9 .
第三,运算符和数字是一样的。
按字符把运算符分开就可以了
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯