从指向字符串的指针获取字符

Get a char from a pointer to a string

本文关键字:指针 获取 字符 字符串      更新时间:2023-10-16

您好,我正在尝试编写一个函数,该函数通过使用指针而不是返回值将字符串转换为小写。

void makeLowerCase(std::string* in){
//for loop tolower(char from *in);}

但我不知道如何将每个字符从我的指针中取出以使用 tolower(),或者如何获取字符串中有多少个字符作为

*in.length() 

sizeof(*in)/sizeof(char)

不要为它工作。前者我在使用指针时出错,后者我得到相同的返回值sizeof(*in)所以我什至不知道如何结束我的 for 循环。

C++有一个快捷方式来获取指针指向的对象的成员:

in->length()

要访问字符,请使用括号:

(*in)[i]

不是通过指针传递并处理指针语法,而是可以通过引用传递字符串,然后您可以像普通std::string一样使用它。 如果必须使用指针,则可以使用

in->length();

(*in).length();

在第二种情况下需要括号,因为.的优先级高于*

至于将字符串转换为小写,您可以使用 <algorithm> 中的内置函数,这将给你

void makeLowerCase(std::string& in)
{
    std::transform(in.begin(), in.end(), in.begin(), ::tolower);
}
*in.length() 

不起作用,因为.的优先级高于 * 。使用参数:

(*in).length() 
sizeof(*in)/sizeof(char)

sizeof(*in) / 1

因为sizeof(char) == 1. sizeof(*in) == sizeof(std::string) ,因此这会产生 std::string 对象本身的大小,而不是实现定义的字符串。


这些信息与迭代器、for_each 和 lambda 相结合,构成了一个没有任何函数的漂亮三行

#include <cctype>
...
for (char& c : str)
    c = std::tolower(c);

笔记:

  • 请改用引用。它们看起来更好,更容易使用。指针应该只用于C++低级内容或无法删除它们的情况。

对于指针,您将使用指针运算符。所以那将是

in->length();

然而,裸循环并不是理想的方式(老实说,使用指针也不是)。

更好的方法是使用迭代器遍历字符串并以这种方式进行转换。

for (auto it=in->begin(); it!=in->end(); ++it) {
    *it = std::tolower(*it);
}