下面我有一个名为line的字符串来自文件。该字符串有逗号分隔它,第一部分转到字符串向量,第二部分转到浮点向量。之后的任何事情都没有被使用。
第一部分是“文本”,这是正确的。但第二个显示“248”,而它应该说“1.234”
我需要帮助正确转换它。非常感谢任何帮助,谢谢。
我对编程很新。对不起任何可怕的风格。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main ()
{
string line ("test,1.234,4.3245,5.231");
string comma (",");
size_t found;
size_t found2;
string round1;
float round2;
vector<string> vector1;
vector<float> vector2;
// Finds locations of first 2 commas
found = line.find(comma);
if (found!=string::npos)
found2 = line.find(comma,found+1);
if (found2!=string::npos)
//Puts data before first comma to round1 (string type)
for (int a = 0; a < found; a++){
round1 = round1 += line[a];
}
//Puts data after first comma and before second comma to round2 (float type)
for (int b = found+1; b < found2; b++){
round2 = round2 += line[b];
}
//Puts data to vectors
vector1.push_back(round1);
vector2.push_back(round2);
cout << vector1[0] << endl << vector2[0] << endl;
return 0;
}
答案 0 :(得分:1)
您的问题是您要将字符添加到浮点值,您无法以这种方式转换它。你实际上在做的是加上组成你的数字的字符的十六进制值,如果你在ASCII表中查看你会注意到1 = 49,。= 46,2 = 50,3 = 51,4 = 52 。如果你将这5个加起来就得到248.此外,即使在这种情况下它是错误的:
round2 = round2 += line[b];
应该是:
round2 += line[b];
原因是+ =运算符将等同于:
round2 = round2 + line[b];
因此在它前面添加额外的round2 =
毫无意义。
为了正确使用这样的字符串流:
#include <string>
#include <sstream>
int main()
{
float f;
std::stringstream floatStream;
floatStream << "123.4";
floatStream >> f;
return 0;
}
答案 1 :(得分:0)
考虑使用stringstream
和getline(..., ',')
:
string line;
string strPart;
string floatPart;
istringstream isline(line);
getline(isline, strPart, ',');
getline(isline, floatPart, ',');
istringstream isfloat(floatPart);
float f;
isfloat >> f;
当然,这需要对可能的错误进行大量检查,但是应该有效。