从指向字符串的指针获取字符
Get a char from a pointer to a string
您好,我正在尝试编写一个函数,该函数通过使用指针而不是返回值将字符串转换为小写。
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);
}
相关文章:
- 我可以使用 decltype() 或其他东西通过指针获取真实类型吗?
- 通过基类指针获取派生类对象的引用
- C++从双指针获取数据
- 如何从原始指针获取shared_ptr?
- 如何从C++中的字符指针获取子字符串
- 使用 std::launder 从指向非活动工会成员的指针获取指向活动工会成员的指针?
- 使用我的共享指针获取内存泄漏
- 通过指向非多态类型的基类的指针获取已分配内存的地址
- 指向引用的指针获取器
- 使用 std::launder 从指向非活动对象的指针获取指向活动对象成员的指针?
- CPP:无法使用 -> 通过指针获取成员的值
- 字符串十六进制到指针获取值
- 从基类指针获取模板派生类的值
- 从 C++ 数组元素的指针获取索引的最快方法是什么
- 通过指针获取最大数量的元素
- 如何使用指针获取字符串数据
- 返回指向指针数组的指针获取下一个元素失败
- 从"子项"项指针获取"父""std::tuple"
- 从成员函数指针获取方法的返回类型
- 如何从指向数组的指针获取对该数组的引用