您好我正在尝试编写一个函数,通过使用指针而不是返回值将字符串转换为小写。
void makeLowerCase(std::string* in){
//for loop tolower(char from *in);}
但是我不知道如何从我的指针中获取每个char以使用tolower(),或者如何获取字符串中有多少个字符
*in.length()
和
sizeof(*in)/sizeof(char)
不适合它。前者我在使用指针时遇到错误,后者我得到sizeof(*in)
的相同返回值,所以我甚至不知道如何结束我的for循环。
答案 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) == 1
。 sizeof(*in) == sizeof(std::string)
,所以这会产生std::string
对象本身的大小,而不是实现定义的字符串。
此信息与迭代器for_each
和lambdas结合使用,构成了一个没有任何功能的漂亮的三线程序:
#include <cctype>
...
for (char& c : str)
c = std::tolower(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);
}