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