c++问题,主要是将多个浮点数从字符串中分离。。。
答案:6 悬赏:70
解决时间 2021-02-27 18:33
- 提问者网友:空白
- 2021-02-26 19:27
求一个函数,将字符串(sort 3.5 1.5 54 2.6 31.6)中的所有数字分离出来,并赋到数组a[255]中进行排序,排序我会。。主要是分离浮点数。。不能用类和对象。。不能出现printf scanf等......
最佳答案
- 二级知识专家网友:星痕之殇
- 2021-02-26 19:33
能用atof 函数吗? 还是有基本方法实现
全部回答
- 1楼网友:佛说妍妍很渣
- 2021-02-27 00:32
假定 字符串开始无空格,以后 用1个空格 分隔数据,结尾无空格。
例如 s[]="sort 3.5 1.5 54 2.6 31.6 sort 6 XYZ 8.12";
用下面程序分离出浮点数,个数为 n, 在 a 数组中。
#include
main(){
char s[]="sort 3.5 1.5 54 2.6 31.6 sort 6 XYZ 8.12";
float a[255];
int i,L,n=0;
L = strlen(s);
if (sscanf(&s[0],"%f",&a[n]) == 1) n++;
for (i=1;i
- 2楼网友:哥在撩妹请勿打扰
- 2021-02-27 00:18
分割为字符串数组,在判断每个数组中是否有'.',没有的话就转化为整数。
- 3楼网友:孤伤未赏
- 2021-02-26 22:49
直接用指针判断不就完了。
先挑出3.5 1.5 54 等等
然后小数点前面的作为整数。后面的作为小数
比如:第一个取出3,然后是5 * (0.1)
第二个取出1, 然后是5 * (0.1)
再比如1.23;
取出1 作为整数,小数是:2 * 0.1 + 3 * 0.01;
- 4楼网友:放肆的依賴
- 2021-02-26 22:38
#include
#include
int separate(char s[],double a[]) {
int i = 0,n = 0;
double inum,dnum,e;
while(s[i]) {
inum = dnum = 0;
while(isalpha(s[i]) || s[i] == ' ') ++i; // 跳过alpha和' '
while(s[i] >= '0' && s[i] <= '9') // 读取整数部分
inum = 10 * inum + s[i++] - '0';
e = 1;
if(s[i] == '.') {
++i;
while(s[i] >= '0' && s[i] <= '9') { // 读取小数部分
dnum = 10 * dnum + s[i++] - '0';
e *= 10;
}
dnum /= e;
}
a[n++] = inum + dnum;
}
return n;
}
int main() {
char str[] = "sort 3.5 1.5 54 2.6 31.6";
double a[100];
int i,n = separate(str,a);
for(i = 0; i < n; ++i)
printf("%g ",a[i]);
printf("\n");
return 0;
}
- 5楼网友:抱不住太阳的深海
- 2021-02-26 21:00
#include
#include
#include
void toDoubleArr(char* src,double* des,int len)
{
int i = 0;
int j = 0;
double tmp = 0;
bool flag = true; // int
bool begn = false;
double mul = 0.1;
for(;i='0'&&src[i]<='9')
{
begn = true;
if(flag) // integer
{
tmp = tmp*10 + (src[i] - '0') ;
}
else
{
tmp = tmp + (src[i] - '0') *mul;
mul *= 0.1;
}
}
else if(src[i] == ' ')
{
if(begn == true) // another new begin
{
des[j++] = tmp;
tmp = 0;
begn = false;
flag = true;
}
}
// the last one
if(i == len-1)
{
des[j++] = tmp;
}
}
}
int main()
{
char src[100] = "sort 3.5 1.5 54 2.6 31.6";
double des[255];
memset(des,0,sizeof(des));
int len = strlen(src);
toDoubleArr(src,des,len);
// test
for(int i=0;i<10;i++)
{
if(fabs(des[i])<0.0000001)
break;
printf("des[%d] =%f\n",i,des[i]);
}
return 0;
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |