寻找最优雅的循环特定字符串的解决方案

Looking for the most elegant solution for looping a specific string

本文关键字:字符串 解决方案 循环 寻找      更新时间:2023-10-16

所以我下载了十几个字符串,其中一个例子是这个

"澳大利亚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 上运行