所以我下载了十几个字符串,其中一个例子是这个
" Australija 036 AUD 1 5,136250 5,151705 5,167160"
空格在这里显示为单个,但实际上在数字和字符之间是多个。
所以我的第一个想法是手动计算我需要的数字(第二个,在这个例子中为5.151705)并获得子串。(41,8)但这似乎对我来说。
第二个想法是将所有数字保存为向量中的字符,然后得到 vector [4]并将其保存为单独的变量。
第三个是循环字符串,直到我将自己定位在第五组空格之后,然后对其进行子串。
只是寻找一些关于最佳和#34;
的反馈答案 0 :(得分:1)
我会使用流来执行此任务,因为它们以优雅的方式吞噬了多个空格。
#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <iomanip>
int main() {
std::string line = "Australija 036 AUD 1 5,136250 5,151705 5,167160";
// Extract string beginning
std::istringstream input(line);
std::string p1, p2, p3;
int i1 = 0;
input >> p1 >> p2 >> p3 >> i1;
// Replace commas
std::string double_numbers;
std::getline(input, double_numbers);
std::replace(double_numbers.begin(), double_numbers.end(), ',','.');
// Extract the remaining numbers
double d1 = 0, d2 = 0, d3=0;
std::istringstream(double_numbers) >> d1 >> d2 >> d3;
// Print result
std::cout << std::setprecision(10) << d2 << std::endl;
return 0;
}
答案 1 :(得分:0)
#include <bits/stdc++.h>
using namespace std;
int main() {
// your code goes here
string str="abc def ghi 1234 5.123";
stringstream ss(str);
string token;
int i=0;
while(ss>>token ){
if(i==4){
printf("%s\n",token.c_str());
}
i++;
}
return 0;
}
上运行
答案 2 :(得分:0)
您还可以考虑首先修剪多个空格。像
这样的东西std::string str = "Australija 036 AUD 1 5,136250 5,151705 5,167160";
str.erase(std::unique(str.begin(), str.end(), [](char a, char b) {
return ::isspace(a) && ::isspace(b);
}), str.end());
字符串拆分也可能有用
std::vector<std::string> split(std::string & str, char delim) {
std::vector<std::string> result;
std::stringstream ss(str);
std::string token;
while (getline(ss, token, delim)) result.push_back(token);
return result;
}
并将其称为
std::vector<std::string> result = split(str, ' ');