2

以下に、ファイルからのlineという文字列があります。文字列には、文字列を区切るためのコンマがあります。最初の部分は文字列ベクトルに、2番目の部分は浮動小数点ベクトルになります。それ以降は使用されません。

最初の部分は「テキスト」として出てきますが、これは正しいです。しかし、2番目のものは「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

問題は、float値に文字を追加していることです。この方法で変換することはできません。実際に行っていたのは、数値を構成する文字の16進値を合計することです。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

stringstream使用を検討してください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 に答える