我正在尝试接收一串像这样的点(2,4),(5,8),(12,7),(15.54,3.65)并将它分成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++;
}
答案 0 :(得分: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>
答案 1 :(得分: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;
}
希望它有用。