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

时间:2016-01-27 15:29:22

标签: c++ function pointers tolower

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

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

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

*in.length() 

sizeof(*in)/sizeof(char)

不适合它。前者我在使用指针时遇到错误,后者我得到sizeof(*in)的相同返回值,所以我甚至不知道如何结束我的for循环。

4 个答案:

答案 0 :(得分:1)

您可以通过引用传递字符串,而不是通过指针传递和处理指针语法,然后您可以像普通 public boolean isFieldExist(String tableName, String fieldName) { boolean isExist = false; SQLiteDatabase db = this.getWritableDatabase(); Cursor res = db.rawQuery("PRAGMA table_info(" + tableName + ")", null); if (res.moveToFirst()) { do { int value = res.getColumnIndex("name"); if(value != -1 && res.getString(value).equals(fieldName)) { isExist = true; } // Add book to books } while (res.moveToNext()); } return isExist; } 一样使用它。如果你必须使用指针,那么你可以使用

std::string

in->length();

在第二种情况下需要使用括号,因为(*in).length(); 的优先级高于.

至于将字符串转换为小写,您可以使用*中的内置函数,这样就可以了解

<algorithm>

答案 1 :(得分:0)

*in.length() 

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

(*in).length() 

sizeof(*in)/sizeof(char)

相同
sizeof(*in) / 1

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

此信息与迭代器for_each和lambdas结合使用,构成了一个没有任何功能的漂亮的三线程序:

#include <cctype>

...

for (char& c : str)
    c = std::tolower(c);

注意:

  • 改为使用引用。它们看起来更好,更容易使用。指针只能在C ++中用于低级别的东西,或者当没有办法将其删除时。

答案 2 :(得分:0)

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

in->length()

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

(*in)[i]

答案 3 :(得分:0)

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

in->length();

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

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

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