传递字符串作为参数

时间:2012-01-09 10:50:19

标签: c++

// 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 *)'

4 个答案:

答案 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创建一个。当然,从stringchar *的转换不是自动的 - 它们是两个非常不同的东西。

我建议你写这个函数:

bool isUnique(const std::string& s)

答案 3 :(得分:2)

更改接受功能

bool isUnique(const string& s)

并将该字符串作为const引用传递

或像其他两个好人一样建议。

这是C ++,最好传递const std::string&,除非你必须与某些C代码兼容,或者只需要使用C字符串。