如何从字符串位置构造 CString/std::string

Posted

技术标签:

【中文标题】如何从字符串位置构造 CString/std::string【英文标题】:How to construct a CString/std::string from a string position 【发布时间】:2012-10-21 19:20:57 【问题描述】:

鉴于以下情况:

for( std::string line; getline( input, line ); )

        CString strFind = line.c_str();
        int n = strFind.ReverseFind( '\\' );

        CString s = CString( strFind,n );

        cout << s << endl;
      // m_Path.push_back( line.c_str() );  

它正在读取 .ini 配置,在这个 .ini 上我有一行:

C:\Downloads\Insanity\Program\7.世界.exe

这一行被添加到vector&lt;CString&gt;

我的问题是int n = strFind.ReverseFind( '\\\' ); 找到第一个 \ 的字符串 pos 从字符串的末尾搜索到开头,在构造像这样的 CString CString s = CString( strFind,n ); 之后,我正在构造字符串上的前 n 个字符,所以s 等于 C:\Downloads\Insanity\Program 但我想要将 7 .World.exe 复制到 CString s 而不是其他方式,我该如何使用 CStringstd::string 来做到这一点?

【问题讨论】:

【参考方案1】:

您是否仅为ReverseFind 功能将std::string 转换为CString?如果是这样,您可以改用std::basic_string::find_last_of

#include <iostream>
#include <string>

int main()

  std::string s(R"(C:\Downloads\Insanity\Program\7. World.exe)");

  auto pos = s.find_last_of( '\\' ) + 1; //advance to one beyond the backslash
  std::string filename( s, pos );
  std::cout << filename << std::endl;

【讨论】:

【参考方案2】:

怎么样:

CString s = strFind.Mid(n+1);

或:

std::string s = line.substr(n+1);

【讨论】:

以上是关于如何从字符串位置构造 CString/std::string的主要内容,如果未能解决你的问题,请参考以下文章

如何从字符串构造货币语言环境?

如何从 Instant 和时间字符串构造 ZonedDateTime?

如何从来自api响应的json字符串构造对象列表?

nowcoder-练习赛16

如何从 base64 编码的字符串构造 java.security.PublicKey 对象?

如何检查是不是可以从给定类型构造模板类型