2

下面我有一个来自文件的名为 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;
}
4

2 回答 2

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;
}
于 2012-09-17T16:10:22.780 回答
0

考虑使用stringstreamand getline(..., ',')

string line;
string strPart;
string floatPart;
istringstream isline(line);
getline(isline, strPart, ',');
getline(isline, floatPart, ',');
istringstream isfloat(floatPart);
float f;
isfloat >> f;

当然,这需要对可能的错误进行大量检查,但应该可以。

于 2012-09-17T16:08:07.693 回答