// EDITED: 跟进问题:
但是将函数设为isUnique(const char *s)
然后调用函数isUnique(str.c_str())
不允许我修改函数
中的字符串str
//
我遇到传递字符串的问题:
bool isUnique(char *s)
{
int arr[256] = {0};
while(*s)
{
arr[*s]++;
if(arr[*s]>1)
{
cout<<"not unique";
return false;
}
}
}
int main()
{
string str = "abcda";
cout<<"1: True : unique, 2: False: Not Unique"<<endl<<isUnique(str);
}
错误:无法将参数'1'的'std :: string {aka std :: basic_string}'转换为'char *'为'bool isUnique(char *)'
答案 0 :(得分:9)
将参数传递为:
isUnique(str.c_str());
并将函数的参数类型设为const char*
:
bool isUnique(const char *s)
因为std::string::c_str()
返回const char*
。
甚至更好,制作参数const string&
:
bool isUnique(const std::string & s);
然后像你一样:isUnique(str)
。在函数内部,您可以使用s[i]
来访问字符串中的字符,其中0 <= i < s.size()
。
答案 1 :(得分:3)
使用
isUnique(str.c_str())
并确保isUnique
采用char const *
参数。
答案 2 :(得分:2)
您没有传递字符串。您正在传递char *
并尝试从string
创建一个。当然,从string
到char *
的转换不是自动的 - 它们是两个非常不同的东西。
我建议你写这个函数:
bool isUnique(const std::string& s)
答案 3 :(得分:2)
更改接受功能
bool isUnique(const string& s)
并将该字符串作为const引用传递
或像其他两个好人一样建议。
这是C ++,最好传递const std::string&
,除非你必须与某些C代码兼容,或者只需要使用C字符串。