所以我下载了十几个字符串,其中一个例子是这个
"澳大利亚036 AUD 1 5136250 5151705 5167160">
这里的空格显示为单个,但实际上是数字和字符之间的多个空格。
因此,我的第一个想法是手动计算我需要的数字(第二个数字,在本例中为5.151705(,并获得子字符串。(41,8(,但这对我来说似乎是合理的。
第二个想法是将所有的数字像字符一样保存在一个向量中,然后得到向量[4],并将其保存到一个单独的变量中。
第三种方法是循环字符串,直到我把自己放在第五组空格之后,然后用子字符串
只是在寻找一些关于什么是"最好的"的反馈。
我会使用流来完成这项任务,因为它们以优雅的方式吞噬了多个空间。
#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;
}
您还可以考虑首先修剪多个空白。类似的东西
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, ' ');
#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("%sn",token.c_str());
}
i++;
}
return 0;
}
在ideone.com 上运行