【问题标题】:Path string from std::vector`来自 std::vector 的路径字符串
【发布时间】:2021-08-11 06:18:51
【问题描述】:

我有一个类似于 char 的向量

C:/Users/person/Desktop/Albedo.pngC:/Users/person/Desktop/Metallic.pngC:/Users/person/Desktop/Noice.pngC:/Users/person/Desktop/AO.png

如何将向量拆分为单独的路径? 也就是说,我想拥有

std::string path1; // = C:/Users/person/Desktop/Albedo.png;
std::string path2; // = C:/Users/person/Desktop/Metallic.png;
std::string path3; // = C:/Users/person/Desktop/Noice.png;
std::string path4; // = C:/Users/person/Desktop/AO.png;

知道我该怎么做吗? 提前致谢!

【问题讨论】:

  • 不清楚您要做什么。使用 winapi 的 splitpath 和/或 std::getline
  • std::getline 会帮忙吗?我不这么认为。我去看看Winapi的splitpath,谢谢!
  • 您也可以查看<filesystem>
  • 除非有固定数量的“个别路径”,否则提取一个std::vector<std::string>,而不是不同的变量。无论如何,每个字符串的开头都由一个由字母(驱动器)组成的三元组表示,然后是':',然后是'/'。找出如何循环遍历向量以搜索该三元组,并将两个三元组之间的字符提取为字符串。此外,某些系统(例如 Windows)还使用 '\'(必须在 char 或字符串文字中分隔)作为路径分隔符。不,我不会写代码——你需要付出一些努力来解决你的问题
  • 我没有看到完整的字符串 - 我正在打电话。请忽略我的cmets。

标签: c++ algorithm iterator stdvector stdstring


【解决方案1】:

例如,如果向量中的每条路径都具有扩展名.png,则可以采用以下方式,如下面的演示程序所示。

#include <iostream>
#include <string>
#include <vector>
#include <iterator>
#include <algorithm>
#include <cstring>

int main() 
{
    const char *s ="C:/Users/person/Desktop/Albedo.png"
                   "C:/Users/person/Desktop/Metallic.png"
                   "C:/Users/person/Desktop/Noice.png"
                   "C:/Users/person/Desktop/AO.png";
    std::vector<char> v( s, s + std::strlen( s ) );
    
    std::vector<std::string> paths;
    const char *ext = ".png";
    size_t n = std::strlen( ext );
    
    for ( auto first = std::begin( v ), last = std::end( v ), it = first;
          ( it = std::search( first, last, ext, ext + n ) ) != last;
          first = it
        )
    {
        std::advance( it, n );
        paths.push_back( { first, it } );
    }         
    
    for ( const auto &path : paths )
    {
        std::cout << path << '\n';
    }
    
    return 0;
}

程序输出是

C:/Users/person/Desktop/Albedo.png
C:/Users/person/Desktop/Metallic.png
C:/Users/person/Desktop/Noice.png
C:/Users/person/Desktop/AO.png

【讨论】:

  • 很好,非常感谢!奇迹般有效!你知道有什么方法可以让这个扩展独立吗?我正在考虑与C:/ 拆分,但它会使其依赖于平台:(
  • @FahimFuad 我还没有想到这一点。但是你可以提出一个新的问题,提出新的要求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
  • 2013-02-08
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 2016-02-12
  • 1970-01-01
相关资源
最近更新 更多