中易网

c++问题,主要是将多个浮点数从字符串中分离。。。

答案:6  悬赏:70  
解决时间 2021-02-27 18:33
求一个函数,将字符串(sort 3.5 1.5 54 2.6 31.6)中的所有数字分离出来,并赋到数组a[255]中进行排序,排序我会。。主要是分离浮点数。。不能用类和对象。。不能出现printf scanf等......
最佳答案
能用atof 函数吗? 还是有基本方法实现
全部回答
假定 字符串开始无空格,以后 用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; }
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯