首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用字符串-C++的find_last_of

使用字符串-C++的find_last_of
EN

Stack Overflow用户
提问于 2018-03-22 20:23:27
回答 2查看 2.2K关注 0票数 0

我想提取给定字符串的最后一部分。下面是代码片段:

代码语言:javascript
复制
int main ()
{
   const std::string path="C:\Users\rd_nsl_Bentley_1.2.sc";
   auto const pos=path.find_last_of('\\');
   cout<<"pos="<<pos<<endl;
   const auto leaf=path.substr(pos+1);

   std::cout << leaf << '\n';
}

我的输出应该是

rd_nsl_Bentley_1.2.sc

但输出是

代码语言:javascript
复制
pos=18446744073709551615
C:Usersrd_nsl_Bentley_1.2.sc

pos值是任意的,只有"\“从整个字符串中删除。

EN

回答 2

Stack Overflow用户

发布于 2018-03-22 20:28:13

您需要转义字符串文本中的\字符,就像要传递给find_last_of()的字符文本一样。

从以下内容更改字符串文字:

代码语言:javascript
复制
"C:\Users\rd_nsl_Bentley_1.2.sc"

对此:

代码语言:javascript
复制
"C:\\Users\\rd_nsl_Bentley_1.2.sc"

或者,如果您使用的是C++11或更高版本,则为:

代码语言:javascript
复制
R"(C:\Users\rd_nsl_Bentley_1.2.sc)"

如果不转义,编译器将将\U\r解释为逸出序列 (其中\U无效,因为它不是\Unnnnnnnn格式,而\r是回车)。它们不会像您所期望的那样被解释为单个字符'\''U''\''r'

因此,您的字符串将没有任何'\'字符供find_last_of()查找,因此它将返回std::string::npos,即-1 (当解释为无符号64位数字时的18446744073709551615 ),因此pos+1为0,导致substr()以- is返回原始字符串,std::cout将忽略\U\r转义序列,从而产生正在看到的输出。

票数 2
EN

Stack Overflow用户

发布于 2018-03-22 20:28:49

定义path变量时,没有转义\字符以正确地将它们添加到字符串中。它将字符串当作转义字符对待,就像您尝试过\U\r一样。

更改为"C:\\Users\\rd_nsl_Bentley_1.2.sc"

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49437840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档