我试图用C ++编写一个程序,它通过一个char数组,用ch2替换ch1,我遇到的问题是让它改变输入的实际字符串而不是返回一个新的字符串。在C#中你会使用" ref"但我很困惑如何在c ++中这样做,你需要一个*或&?
以下代码有很多错误:
(7):错误C2664:' strlen' :无法从' char'转换参数1到#char; char *'从整数类型到指针类型的转换需要reinterpret_cast,C风格的转换或函数式转换
(7):错误C2440:'初始化' :无法转换为' char *' to' char []'尽管存在对引用的转换或对数组的指针
,但是没有对数组类型的转换(11):错误C2100:非法间接
(17):错误C2100:非法间接
(24):错误C2440:' =' :无法转换为' char []'去#char;'没有可以进行此转换的上下文
(36):错误C2664:'替换' :无法从' char [17]'转换参数1 to' char&'
#include<iostream>
#include<cstring>
using namespace std;
int replace(char & str, char ch1, char ch2)
{
char newStr[]= new char[strlen(str)+1];
int i=0;
while(str!='\0')
{
if(*str==ch1)
{
newStr[i]=ch2;
}
else
{
newStr[i]=*str;
}
str++;
i++;
}
newStr[i]='\0';
str = newStr;
return 0;
}
int main()
{
char str[]="My name is Craig";
char takeOut='C';
char changeTo='a';
cout << "Before: " << str <<endl;
int changes=replace(str, takeOut, changeTo);
cout << "After: " << str << endl;
cin.get();
cin.get();
return 0;
}
答案 0 :(得分:2)
在C ++中,您使用std::string
和std::replace
:
std::string s = "My name is Craig";
std::replace(s.begin(), s.end(), 'C', 'a');
如果出于某种原因你想要实现自己的版本,使用指向空终止字符串的指针,主要的一点是你不需要创建一个新的字符串:
void replace(char* str, char ch1, char ch2)
{
while (*str != '\0')
{
if (*str == ch1) *str = ch2;
++str;
}
}