如何在C++中获取字符串的最后一个字符?

24
在 Python 中,您可以使用 print "String"[-1] 语句来打印字符串的最后一个字符 'g'。在 C++ 中是否有类似的等价语句?

1
你的问题是关于C++字符串还是C字符串?也许你感到困惑是因为下面所有的答案都使用了C++字符串,但也许你的问题是关于C字符串的。 - john
不,我使用C++。 - user4591818
1
@HamzaTahboub: 不确定你是否理解了John的观点:在C++中,有一个std::string库类型,可以像这样使用:std::string s("String"); std::cout << s.back() << '\n';。此外,还有C风格的以NUL结尾的ASCIIZ字符串。像"String"这样的字符串字面量是ASCIIZ格式的字符数组,并且可以轻松地衰减为其第一个字符的const char*指针。你不能调用"String".back();,但可以编写一个函数char back(const char* p) { return p[strlen(p) - 1]; }来实现相同的功能。 - Tony Delroy
4个回答

51
你可以使用 string.back() 来获取到字符串中最后一个字符的引用。字符串的最后一个字符是反转字符串中的第一个字符,所以string.rbegin()会给你一个指向最后一个字符的迭代器。

我需要使用任何库来使用它们吗?因为它们在我的电脑上无法工作。 - user4591818
6
在C++11标准中,std::string添加了back()和front()函数。 - Arne Kjetil Andersen
@john 我在所有的IDE中都遇到了这个问题,无论是使用rbegin还是back。错误信息为:error: request for member 'rbegin' in '"123"', which is of non-class type 'const char [4]' - user4591818
1
@HamzaTahboub 你问到了字符串。为什么要在字符数组上进行测试? - David Schwartz
1
@HamzaTahboub 问题就在于你试图将C++字符串函数应用于C字符串。看一下Tim的答案或者上面Tony D的评论。 - john
显示剩余2条评论

18

对于 std::string,使用 back() 函数:

std::string str ("Some string");
cout << str.back()

输出:

g

7

对于C字符串,它是

String[strlen(String) - 1];

对于C ++风格的字符串,它可以是

String.back();
*String.rbegin();
String[String.length() - 1];

3
您可以使用以下函数:

function:

my_string.back();

如果您想输出它,则需要:
#include <iostream>
std::cout << my_string.back();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接