将字符串转换为char

Rog*_*ger 2 c++

我知道我可以做到这一点str.c_str(),但我不希望角色不变.我想要一个char,以便我可以做一些修改.

char* removeDup(char *s)
{


        int len = strlen(s);
        int p,q, idx = -1;
    for(p = 0; p< len; p++)
   {
    char temp = s[p];
    bool flag = true;
    for(q=0;q<p;q++)
    {
        if(s[q] == temp)
        {
            flag = false;
            break;
        }
    }
    if(flag == true)
    {
        s[++idx] = temp;
    }
}
    s[++idx] = '\0';
    return s;
}
Run Code Online (Sandbox Code Playgroud)

如果我将此函数调用如下,我会收到错误;

string s = "abcde";
removeDuplicate(s.c_str());
Run Code Online (Sandbox Code Playgroud)

我需要将其转换schar而不是const char.

Luc*_*ore 5

从a获取基础数据std::string您可以使用:

string :: data() string :: c_str()都返回一个const char *.

在任何一种情况下,返回的数据都是const char *因为它的存储器被分配在一些只允许用户程序修改的只读实现定义区域中.任何修改返回的尝试const char *都会导致未定义的行为.

所以你不能也不应该(通过const_cast)修改返回的字符串.

通过创建一个新的char*,分配它,并从以下内容复制内容来实现这一目标的唯一正确方法const char*:

std::string myString = "blabla";
char* myPtr = new char[myString.size() + 1];
myString.copy(myPtr, myString.size());
myPtr[myString.size()] = '\0';
Run Code Online (Sandbox Code Playgroud)

  • @WTP:的确,但它需要`std :: unique_ptr <char []>`,以便正确删除数组. (2认同)
  • @Dennis`std :: vector <char>`将是一个更好的选择,因为它负责分配和释放.(实际上,唯一有效的选择是重写函数以使用迭代器---并希望同时使其可读.) (2认同)