从指向字符串的指针获取一个字符
Get a char from a pointer to a string
你好,我正在尝试编写一个函数,通过使用指针而不是 return 值将字符串转换为小写。
void makeLowerCase(std::string* in){
//for loop tolower(char from *in);}
但我不知道如何从我的指针中获取每个字符以使用 tolower() ,或者如何获取字符串中有多少个字符
*in.length()
和
sizeof(*in)/sizeof(char)
不要为它工作。前者我在使用指针时出错,后者我得到相同的 return 值 sizeof(*in)
所以我什至不知道我将如何结束我的 for 循环。
*in.length()
不起作用,因为 .
的优先级高于 *
。使用括号:
(*in).length()
sizeof(*in)/sizeof(char)
与
相同
sizeof(*in) / 1
因为sizeof(char) == 1
。 sizeof(*in) == sizeof(std::string)
,所以这会产生 std::string
对象本身的大小,而不是字符串 implemention-defined.
此信息与迭代器、for_each
和 lambda 相结合,构成了一个漂亮的 three-liner,没有任何函数:
#include <cctype>
...
for (char& c : str)
c = std::tolower(c);
备注:
- 改用引用。它们看起来更好,更易于使用。指针只应在 C++ 中用于 low-level 东西或当没有办法将它们删除时。
您可以通过引用传递字符串,而不是通过指针传递和处理指针语法,然后您可以像正常使用它一样使用它 std::string
。如果您必须使用指针,那么您可以使用
in->length();
或
(*in).length();
第二种情况需要括号,因为 .
的优先级高于 *
。
至于将字符串转换为小写,您可以使用 <algorithm>
中的内置函数,这会给您
void makeLowerCase(std::string& in)
{
std::transform(in.begin(), in.end(), in.begin(), ::tolower);
}
C++ 有一个获取指针指向的对象成员的快捷方式:
in->length()
要访问字符,请使用括号:
(*in)[i]
对于指针,您将使用指针运算符。那就是
in->length();
然而,裸循环不是理想的方式(老实说,使用指针也不是)。
更好的方法是使用迭代器遍历字符串并以这种方式进行转换。
for (auto it=in->begin(); it!=in->end(); ++it) {
*it = std::tolower(*it);
}
你好,我正在尝试编写一个函数,通过使用指针而不是 return 值将字符串转换为小写。
void makeLowerCase(std::string* in){
//for loop tolower(char from *in);}
但我不知道如何从我的指针中获取每个字符以使用 tolower() ,或者如何获取字符串中有多少个字符
*in.length()
和
sizeof(*in)/sizeof(char)
不要为它工作。前者我在使用指针时出错,后者我得到相同的 return 值 sizeof(*in)
所以我什至不知道我将如何结束我的 for 循环。
*in.length()
不起作用,因为 .
的优先级高于 *
。使用括号:
(*in).length()
sizeof(*in)/sizeof(char)
与
相同sizeof(*in) / 1
因为sizeof(char) == 1
。 sizeof(*in) == sizeof(std::string)
,所以这会产生 std::string
对象本身的大小,而不是字符串 implemention-defined.
此信息与迭代器、for_each
和 lambda 相结合,构成了一个漂亮的 three-liner,没有任何函数:
#include <cctype>
...
for (char& c : str)
c = std::tolower(c);
备注:
- 改用引用。它们看起来更好,更易于使用。指针只应在 C++ 中用于 low-level 东西或当没有办法将它们删除时。
您可以通过引用传递字符串,而不是通过指针传递和处理指针语法,然后您可以像正常使用它一样使用它 std::string
。如果您必须使用指针,那么您可以使用
in->length();
或
(*in).length();
第二种情况需要括号,因为 .
的优先级高于 *
。
至于将字符串转换为小写,您可以使用 <algorithm>
中的内置函数,这会给您
void makeLowerCase(std::string& in)
{
std::transform(in.begin(), in.end(), in.begin(), ::tolower);
}
C++ 有一个获取指针指向的对象成员的快捷方式:
in->length()
要访问字符,请使用括号:
(*in)[i]
对于指针,您将使用指针运算符。那就是
in->length();
然而,裸循环不是理想的方式(老实说,使用指针也不是)。
更好的方法是使用迭代器遍历字符串并以这种方式进行转换。
for (auto it=in->begin(); it!=in->end(); ++it) {
*it = std::tolower(*it);
}