麻烦:将字符串转换为双精度
Posted
技术标签:
【中文标题】麻烦:将字符串转换为双精度【英文标题】:trouble : convert string to double 【发布时间】:2014-01-02 10:33:57 【问题描述】:当我将字符串转换为双变量时遇到问题。
#include<iostream>
#include<fstream>
#include<string.h>
#include<sstream>
#include<vector>
using namespace std;
int main()
int cols,rows;
cols=6;rows=15;
string line;
string **value;
double *conv;
string *rowsis;
int i_line=0;
int i,j,k,a,l;
j=0;
double ***datV;
vector <string> v;
vector <string> nVal;
string delimiter=" ";
size_t pos=0;
string token;
ifstream fin("data/profil.data");
while(getline(fin,line))
v.push_back(line);
i_line++;
value=new string*[i_line];
rowsis=new string[i_line];
for(i=0;i<i_line;i+=18)
a=1+i;
rowsis[j]=v[i];
value[j]=new string[rows];
for(k=0;k<rows;k++)
value[j][k]=v[a+k];
while((pos=value[j][k].find(delimiter))!=string::npos)
token=value[j][k].substr(0,pos);
value[j][k].erase(0,pos+delimiter.length());
nVal.push_back(token);
nVal.push_back(value[j][k]);
j++;
int limit=(j*rows-1)+(j*rows*cols);
datV=new double**[i_line];
conv=new double[limit];
int b=0;
for(i=1;i<limit;i++)
stringstream vd(nVal[i]);
vd>>conv[b];
//view result variable conv
cout<<conv[b];
b++;
int c=0;
for(i=0;i<j;i++)
datV[i]=new double*[rows];
for(k=0;k<rows;k++)
datV[i][k]=new double[cols];
for(l=0;l<cols;l++)
datV[i][k][l]=conv[c];
//cout<<datV[i][k][l]<<" ";
c++;
//cout<<endl;
//cout<<endl<<endl;
return 0;
和这样的配置文件数据:
normal
-1 -1 63 -3 -1 0
0 0 62 -3 -1 0
-1 -1 61 -3 0 0
-1 -1 63 -2 -1 0
-1 -1 63 -3 -1 0
-1 -1 63 -3 -1 0
-1 -1 63 -3 0 0
-1 -1 63 -3 -1 0
-1 -1 63 -3 -1 0
-1 -1 61 -3 0 0
-1 -1 61 -3 0 0
-1 -1 64 -3 -1 0
-1 -1 64 -3 -1 0
-1 -1 60 -3 0 0
-1 0 64 -2 -1 0
normal
-1 -1 63 -2 -1 0
-1 -1 63 -3 -1 0
-1 -1 61 -3 0 0
0 -4 63 1 0 0
0 -1 59 -2 0 -1
-3 3 57 -8 -3 -1
-1 3 70 -10 -2 -1
0 -3 61 0 0 0
0 -2 53 -1 -2 0
0 -3 66 1 4 0
-3 3 58 -10 -5 0
-1 -1 66 -4 -2 0
-1 -2 67 -3 -1 0
0 1 66 -6 -3 -1
-1 -1 59 -3 -4 0
nVal 存储字符串字符。 nVal[i] 结果为:
-1-163-3-100062-3-10-1-161-300
现在 conv[b] 是:
-1-163-3-10*0*0062-3-10*0*-1-161-300*0*
nVal转换时添加了0个值,如何删除0个值?
请帮忙?\
【问题讨论】:
注意,如果你想使用std::string
,你应该#include <string>
。
【参考方案1】:
尝试使用 atof
例子
#include <stdlib.h>
int main()
string word;
openfile >> word;
double lol = atof(word.c_str());
return 0;
【讨论】:
@BoBTFish 似乎他正在使用旧的编译器 - 字符串包含在 string.h 中 @Nazar554 我以为应该是<cstring>
。
@Yanshof 是的,但是你如何区分失败和成功读取 0?
我认为 '\n' 中的 0 表示,但在打印出变量 nVal[i] 时未显示。
我希望 datV[i][k][l] 应该包含 3D 双精度数组,但 '\n' 无法使用条件验证 if (nVal[i]=='\n')
【参考方案2】:
我不得不尝试一些实验,最后我找到了解决方案:
for(i=1;i<limit;i++)
stringstream vd(nVal[i]);
if(!(vd>>conv[b]))
b-=1;
vd>>conv[b];
b++;
谢谢大家。 :D
【讨论】:
以上是关于麻烦:将字符串转换为双精度的主要内容,如果未能解决你的问题,请参考以下文章