首页 > 解决方案 > 来自 std::vector 的路径字符串

问题描述

我有一个 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;

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

标签: c++algorithmiteratorstdvectorstdstring

解决方案


例如,如果向量中的每条路径都具有扩展名,那么一种简单的方法.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

推荐阅读