2017-05-09 17 views
-1

私はこの(2,4)、(5,8)、(12,7)、(15.54,3.65)のような点の文字列を受け取り、 Xアレイとyの配列は、まだ私はこれを試してみました、それは数値と指摘する1つの文字列であることから、ポイントを変換するにはxとyの配列への文字列の分離

string polygons; 
int i = 0; 
int length = polygons.length(); 
string x[10000]; 
int index = 0; 
int k = 0; 
getline(cin, polygons); 

for (i = 0; i < length; i++) 
{ 
    if (polygons[i] == '(') 
    { 
     k = polygons.substr(i + 1, 20).find_first_of(","); 

     x[index] = polygons.substr(i + 1, ((k + i) - (i + 1))); 
     index++; 
    } 
} 

int a = 0; 
string y[10000]; 
int index2 = 0; 
int c = 0; 

for (a = 0; a < length; a++) 
{ 
    if (polygons.substr(a) == ",") 
    { 
     c = polygons.substr(a + 1, 20).find_first_of(")"); 
    } 

    y[index2] = polygons.substr(a + 1, ((c + a) - (a + 1))); 
    index2++; 
} 
+2

ブラケットを並べ替えて[mcve] – user4581301

+0

リコメンデーションを提供することをおすすめします。ジョブを中断します。 ['std :: string :: find'(http://en.cppreference.com/w/cpp/string/basic_string/find)を使用して'( 'と') 'を見つけて、それらの間の。その作業が終わったら、プリントアウトコードを['std :: stringstream'](http://en.cppreference.com/w/cpp/io/basic_stringstream)と' std :: getline'に置き換えて、括弧の間にあって番号を印刷していた数字です。すべてが正しく動作し、番号のペアがある場合は、ペアを格納するための良い方法を見つけます。 – user4581301

+0

私はこれを試していただきありがとうございます – Antonio

答えて

0

悲惨である、あなたは.find_first_of()std::stod()を利用することができ、初心者を助けてください。これはあなたのポイント文字列を数値に変換する私のコードです。

#include <string> 
#include <iostream> 
#include <vector> 

using std::string; 
using std::vector; 
using std::cout; 
using std::endl; 

class Point 
{ 
public: 
    Point(double x= 0, double y= 0) : m_x(x), m_y(y) {} 
    inline double getX() const { return m_x; } 
    inline double getY() const { return m_y; } 
private: 
    double m_x, m_y; 
}; 

vector<Point> strPoints2NumPoints(const string& strPoints) 
{ 
    vector<Point> points; 

    for (int i(0); i < strPoints.size(); ++i){ 

     if (strPoints[i] == '('){ 
      // extract X & Y values as string 
      string temp = strPoints.substr(i+1, strPoints.find_first_of(")",i)-i-1); 
      // convert X as strig to double 
      double X = std::stod( temp.substr(0,temp.find(','))); 
      // convert Y as string to double 
      double Y = std::stod( temp.substr(temp.find(',')+1)); 
      points.push_back(Point(X,Y)); 
     } 
    } 

    return points; 
} 


int main(int argc, char* argv[]) 
{ 
    string strPoints("(2,4),(5,8),(12,7),(15.54,3.65)"); 
    vector<Point> numPoints; 

    cout << "Points as string: " << strPoints << endl; 

    numPoints = strPoints2NumPoints(strPoints); 

    cout << "Points as numbers: " << endl; 
    for(int i(0); i < numPoints.size(); ++i){ 
     cout << "Point:<" << numPoints[i].getX() << "," << numPoints[i].getY() << ">" << endl; 
    } 


    return 0; 
} 

上記のコードの出力は、あなたのコードとロジックによると

Points as string: (2,4),(5,8),(12,7),(15.54,3.65) 
Points as numbers: 
Point:<2,4> 
Point:<5,8> 
Point:<12,7> 
Point:<15.54,3.65> 
+0

これはエレガントなあなたの時間のためにありがとう – Antonio

+0

@Antonio、あなたはこの答えがあなたの問題を解決したと思うなら、チェックマークをクリックしてそれを受け入れることを喜んで。乾杯。 – CroCo

0

ですが、私はコードを編集し、バグを扱っています

string polygons; 
int i = 0; 
string x[10000]; 
int index = 0; 
int k = 0; 
getline(cin, polygons); 
int length = polygons.length(); 

for (i = 0; i < length; i++) 
{ 
    if (polygons[i] == '(') 
    { 
     // k = polygons.substr(i + 1, 20).find_first_of(","); 
     k = polygons.find_first_of(",", i); 

     // x[index] = polygons.substr(i + 1, ((k + i) - (i + 1))); 
     x[index] = polygons.substr(i + 1, k - i - 1); 
     index++; 
    } 
} 

int a = 0; 
string y[10000]; 
int index2 = 0; 
int c = 0; 

for (a = 0; a < length; a++) 
{ 
    /* 
    if (polygons.substr(a) == ",") 
    { 
     c = polygons.substr(a + 1, 20).find_first_of(")"); 
    } 

    y[index2] = polygons.substr(a + 1, ((c + a) - (a + 1))); 
    index2++; 
    */ 
    if (polygons[a] == ',' && polygons[a + 1] != '(') 
    { 
     k = polygons.find_first_of(")", a); 
     y[index2] = polygons.substr(a + 1, k - a - 1); 
     index2++; 
    } 
} 

ここに私のコードは、

#include <iostream> 
#include <string> 
#include <vector> 

int main() 
{ 
    std::string Polygons; 
    getline(std::cin, Polygons); 

    std::vector<std::string> XCoords; 
    for (int i = 0; i < Polygons.length(); ++i) 
    { 
     if (Polygons[i] == '(') 
     { 
      auto CommaIndex = Polygons.find_first_of(",", i); 

      XCoords.push_back(Polygons.substr(i + 1, CommaIndex - i - 1)); 
     } 
    } 

    std::vector<std::string> YCoords; 
    for (int i = 0; i < Polygons.length(); ++i) 
    { 
     if (Polygons[i] == ',' && Polygons[i + 1] != '(') 
     { 
      auto Index = Polygons.find_first_of(")", i); 

      YCoords.push_back(Polygons.substr(i + 1, Index - i - 1)); 
     } 
    } 

    return 0; 
} 

希望しますように。

+0

ありがとう、ありがとう、ちょうど私が探していた時間でした。 – Antonio