寻找最优雅的循环特定字符串的解决方案
Looking for the most elegant solution for looping a specific string
所以我下载了十几个字符串,其中一个例子是这个
"澳大利亚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 上运行
相关文章:
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- 计算每个节点的树高,帮助我解释这个代码解决方案
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- visual c++,如何获取解决方案目录中的代码
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- C++Matching Brackets 2解决方案不起作用
- 在 ubuntu3 上C++ goto 定义有什么解决方案吗16.04?
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 使用XOR查找O(n)-解决方案中的两个字符串是否为变位符
- 是否有可能实现O(N)时间和O(1)空间解决方案,以实现C++中的字符串循环移位
- 固定长度的最常见子字符串 - 需要简单的解决方案
- C++字符串代码点和代码单元的任何良好解决方案
- 视觉工作室中涉及 void*、字符串和常量字符 [] 的意外重载解决方案
- 字符串解析的优雅解决方案
- 寻找最优雅的循环特定字符串的解决方案
- 创建并返回字符串向量——最有效的解决方案
- 寻找字符串模式的更好解决方案
- C++需要从常量字符串转换的解决方案
- 如何在c++11中将迭代器转换为字符串?boost解决方案也可以