将字符串传递给char数组,然后修改C

时间:2015-10-21 16:46:27

标签: c++ arrays string

所以我有一个包含"RGGB"的字符串,我需要它在char数组中才能执行某些操作。然后我需要替换空格的某些字符,例如第一个'G',以便我的char数组保持"R GB"

我该怎么做?到目前为止,我尝试了这个解决方案:

int main()
{
    string problem="RGGB";
    const char *p=problem.c_str();
    p[1]=' ';
    return p;
}

我收到错误:

  

指定只读位置*(p + ((sizetype)i))

4 个答案:

答案 0 :(得分:2)

要访问const char*的“内部字符串”(我的意思是std::string),提供了两个成员函数:std::string::c_strstd::string::data。在C ++ 11之前,不同之处在于std::string::data未绑定在const char*时返回指向以空值终止的std::string::c_str的指针。现在,它们是等价的。并且两者都返回const char*,甚至在C ++ 11之前。

您的问题有几种解决方法:

  1. 使用std::strdupstd::str(n)cpy复制字符串并写入副本。

  2. 使用const_cast。非常激烈,但if it doesn't hurt any rules(仅供参考,它确实如此),有效。

  3. 根本不要使用std::string。使用char*执行您想要的操作,然后可以选择将其转换为std::string

  4. 只需使用std::string

  5. 的功能

答案 1 :(得分:0)

  

P [1] =' &#39 ;;

无效,因为const char *是只读指针。

换句话说,它是一个const指针。

记住:

  

当const出现在*的左边时,指向的是常量,如果const出现在*的右边,则指针本身是常量。如果const出现在两种尺寸上,则两者都是常数。

此代码可能有效:

char problem[]="RGGB";
char* p = problem;
p[1]=' ';
cout<<problem;

答案 2 :(得分:0)

string,一个C ++类,不通过char *直接提供对其内部的可更改访问。虽然你可以抛弃const,但这很危险,因为编译器可能会使用const作为优化路径。

如果您绝对需要这样做,只需使用char数组,而不是字符串或使用字符串方法更改字符串的内容。

答案 3 :(得分:0)

答案在你的问题中:

  

我需要它在char数组

然后放在char数组中:

char problem[] = "RGGB";
problem[1] = ' ';

问题解决了。

另一方面,如果您想使用实际 C ++来解决问题:

std::string problem = "RGGB";
problem.at(1) = ' ';