我正在尝试输入一个由3个子串组成的输入并解析它:
城市名称,经度和纬度。
EX:"Monticello 36.8297222 -84.8491667"
这样我就可以push_back()
将城市,纬度和经度加入到他们自己的vector
个对象中。但我无法弄清楚如何做到这一点。
vector<string> city;
vector<float> latitude;
vector<float> longitude;
int main(int argc, char* argv[]){
fstream inData;
inData.open(argv[1]); // open the specified file for reading.
string line;
if (!inData.fail()) // if the file exits and is opened successfully
{
while(getline(inData, line)) // read every line from the file until the end
{
//here is where I want to parse and pushback into it's vector
}
}
inData.close();
答案 0 :(得分:0)
std::getline可以使用一个附加参数,一个分隔符,默认情况下设置为'\ n'。你实际上是用它来逐行阅读。
在阅读一行后,您可以做的是将该行分配给 fig, ax = plt.subplots(figsize=(12,8))
df.groupby('seq').plot(kind='line', x = "x1", y = "y1", ax = ax)
plt.title("abc")
plt.show()
的实例,并让std::istringstream
按空格分割(默认行为)。
operator>>
答案 1 :(得分:0)
您可以使用字符串流(更好:istringstream)来解析该行并将结果写入变量;然后使用变量将它们推回到向量中:
while(getline(inData, line))
{
std::istringstream ss (line);
std::string city_s;
float longitude_f;
float latitude_f;
if (ss >> city_s >> latitude_f >> longitude_f) {
city.push_back(city_s);
latitude.push_back(latitude_f);
longitude.push_back(longitude_f);
}
}
答案 2 :(得分:0)
原始代码的重构和更完整版本。使用c ++ 11。
#include <vector>
#include <string>
#include <fstream>
#include <iostream>
struct place {
std::string city;
double latitude;
double longitude;
};
std::vector<place> read_places(std::istream& is)
{
place buffer;
std::vector<place> places;
while (is >> buffer.city >> buffer.latitude >> buffer.longitude) {
places.push_back(std::move(buffer));
}
return places;
}
int main(int argc, char* argv[]) {
// preconditions
if (argc < 2) {
std::cerr << "usage: myprog <inputfile>\n";
std::exit(4);
}
std::fstream inData(argv[1]);
if (!inData) { std::cerr << "failed to open " << argv[1]; std::exit(100); }
auto places = read_places(inData);
inData.close();
// now use places
// ...
}
答案 3 :(得分:0)
此外,您可以使用字符串标记器 - strtok()并使用“”作为分隔符。以下是可能对您有所帮助的链接 - http://www.cplusplus.com/reference/cstring/strtok/