如何将字符串类型的位置转换为Coord类型的位置?
How to convert a string-type position to a Coord-type position?
在我的工作中读取了一个txt文件,里面的数据中,有车辆的地理位置。由于我在读取这个文件时遇到的问题,我想读取这个信息作为字符串类型,但是我需要将位置信息存储为Coord类型。是否可以将字符串转换为坐标?
错误:
error: invalid operands to binary expression ('__istream_type' (aka 'basic_istream<char, std::char_traits<char> >') and 'veins::Coord')
当 "while ()" 将 "position" 变量读取为 Coord 类型时显示错误。我认为更容易的方法是将位置作为字符串,然后将其转换为 Coord 类型并将其存储在 chData.position.
中
所用方法代码:
std::ifstream file;
file.open("chFile.txt");
if(file.is_open()) {
int sector;
int ch;
Coord position;
while (file >> sector >> ch >> position) {
chTableStruct chData;
chData.ch = ch;
chData.position = position;
chTable.insert(std::pair<int,chTableStruct>(sector,chData));
}
file.close();
}
else {
std::cout << "The file chFile.txt cannot be opened! it exists?" << endl;
}
chFile.txt 文件:
2 20 (401.467,223.4,0)
3 52 (201.446,223.4,0)
1 31 (201.461,623.4,0)
首先,对不起我糟糕的英语...
当我需要读取字符串并转换为坐标时,在 VEINS + OMNeT 模拟器中我这样做:
Coord MyClass::strToCoord(std::string coordStr){
//this 2 lines is will remove () if necessary
coordStr.erase(remove(coordStr.begin(), coordStr.end(), '('), coordStr.end()); //remove '(' from string
coordStr.erase(remove(coordStr.begin(), coordStr.end(), ')'), coordStr.end()); //remove ')' from string
char coordCh[30]; //30 or a sufficiently large number
strcpy(coordCh,coordStr.c_str());
double x = 0, y = 0, z = 0;
char *token = strtok(coordCh, ",");
x = stold(token);
token = strtok(NULL, ",");
y = stold(token);
token = strtok(NULL, ",");
z = stold(token);
cout << "x= " << x << ", y= " << y << ", z= " << z << endl; //comment this line to disable debugging
return Coord(x,y,z);
}
但我不知道是否已经在 VEINS 中实现了执行此操作的方法。
希望对你有所帮助。
在我的工作中读取了一个txt文件,里面的数据中,有车辆的地理位置。由于我在读取这个文件时遇到的问题,我想读取这个信息作为字符串类型,但是我需要将位置信息存储为Coord类型。是否可以将字符串转换为坐标?
错误:
error: invalid operands to binary expression ('__istream_type' (aka 'basic_istream<char, std::char_traits<char> >') and 'veins::Coord')
当 "while ()" 将 "position" 变量读取为 Coord 类型时显示错误。我认为更容易的方法是将位置作为字符串,然后将其转换为 Coord 类型并将其存储在 chData.position.
中所用方法代码:
std::ifstream file;
file.open("chFile.txt");
if(file.is_open()) {
int sector;
int ch;
Coord position;
while (file >> sector >> ch >> position) {
chTableStruct chData;
chData.ch = ch;
chData.position = position;
chTable.insert(std::pair<int,chTableStruct>(sector,chData));
}
file.close();
}
else {
std::cout << "The file chFile.txt cannot be opened! it exists?" << endl;
}
chFile.txt 文件:
2 20 (401.467,223.4,0)
3 52 (201.446,223.4,0)
1 31 (201.461,623.4,0)
首先,对不起我糟糕的英语...
当我需要读取字符串并转换为坐标时,在 VEINS + OMNeT 模拟器中我这样做:
Coord MyClass::strToCoord(std::string coordStr){
//this 2 lines is will remove () if necessary
coordStr.erase(remove(coordStr.begin(), coordStr.end(), '('), coordStr.end()); //remove '(' from string
coordStr.erase(remove(coordStr.begin(), coordStr.end(), ')'), coordStr.end()); //remove ')' from string
char coordCh[30]; //30 or a sufficiently large number
strcpy(coordCh,coordStr.c_str());
double x = 0, y = 0, z = 0;
char *token = strtok(coordCh, ",");
x = stold(token);
token = strtok(NULL, ",");
y = stold(token);
token = strtok(NULL, ",");
z = stold(token);
cout << "x= " << x << ", y= " << y << ", z= " << z << endl; //comment this line to disable debugging
return Coord(x,y,z);
}
但我不知道是否已经在 VEINS 中实现了执行此操作的方法。
希望对你有所帮助。