C++ 实现一个函数,该函数将字符串作为输入,并返回一个新字符串,而不将辅音字母替换为“quot;”&引用;

C++ 实现一个函数,该函数将字符串作为输入,并返回一个新字符串,而不将辅音字母替换为“quot;”&引用;,c++,C++,UPD: 我重写了函数,添加了一个额外的数组,可以在其中写入新变量。但遗憾的是,该功能目前无法正常工作,文本也不清晰。我不明白怎么了 我的代码: bool isconsant(char-ch) { 常量字符*辅音=“bcdfghjklmnpqrstvwxzbcdfgjklmnpqrstvwxz”; for(大小c=0;辅音[c]!='\0';++c) if(ch==辅音[c]) 返回true; 返回false; } char*replacement辅音(char*str) { 尺寸=strlen

UPD: 我重写了函数,添加了一个额外的数组,可以在其中写入新变量。但遗憾的是,该功能目前无法正常工作,文本也不清晰。我不明白怎么了 我的代码:

bool isconsant(char-ch)
{
常量字符*辅音=“bcdfghjklmnpqrstvwxzbcdfgjklmnpqrstvwxz”;
for(大小c=0;辅音[c]!='\0';++c)
if(ch==辅音[c])
返回true;
返回false;
}
char*replacement辅音(char*str)
{
尺寸=strlen(str);
char*ch=新字符[大小+1];
对于(大小索引=0;str[index]!='\0';++index)
{
str[index]=ch[index];
if(IsConsonant(ch[index]))
ch[索引]='!';
}
返回ch;
删除[]ch;
}
int main()
{
const char*ch=“我喜欢这个”;
const char*rez=替换的consonant(ch);

std::cout如果当前试图修改常量字符串,请将调用代码更改为:

int main()
{
    char ch[] = "I like this";
    const char* rez = ReplacedConsonant(ch);
    std::cout << rez;
}
intmain()
{
char ch[]=“我喜欢这个”;
const char*rez=替换的consonant(ch);

std::cout长话短说,ReplacedConsonant(char*str)的参数str的类型是char*,它是指向char的指针,您试图将变量ch作为参数传递,而ch的类型是 const char*是指向const char的指针。所以您基本上是在尝试将const转换为非const var,这是编译时错误。 无论如何,更改字符串文字是未定义的行为,因为字符串文字很可能位于内存的只读部分,而修改只读部分是无意义的,我认为

这应该行得通

int main() {
    char ch[] = "I like this";
    const char* rez = ReplacedConsonant(ch);
    std::cout << rez;
    return 0;
}
intmain(){
char ch[]=“我喜欢这个”;
const char*rez=替换的consonant(ch);

std::cout函数参数的声明(不带限定符
const

表示传递给函数的字符串将被更改

因此,您不能将常量字符串传递给函数

因此,在main中声明一个非常量数组,而不是指向字符串文本的指针

int main()
{
    char ch[] = "I like this";
    std::cout << ReplacedConsonant(ch) << '\n';
}
在这种情况下,您可以将辅音字母替换为任何字符。在函数体中写入

if ( IsConsonant( str[index] ) ) str[index] = c;

<代码> const char *ch:<代码>声明一个不可变的C样式字符串。不能将该函数传递给一个函数,该函数使用<代码> char */COD>(可修改字符串)作为参数。由于这个问题用C++来标记,所以我建议您使用<代码> STD::String < /C> >和其他C++函数,以使您的生活更容易。

std::string ReplacedConsonant(std::string str)
{
    std::replace_if(str.begin(), str.end(), IsConsonant, '!');

    return str;
}

int main()
{
    std::string ch = "I like this";
    std::string res = ReplacedConsonant(ch);

    std::cout << res;
}
std::string ReplacedConsonant(std::string str)
{
std::如果(str.begin(),str.end(),IsConsonant,“!”),则替换_;
返回str;
}
int main()
{
std::string ch=“我喜欢这个”;
std::string res=ReplacedConsonant(ch);

std::cout要做的第一件事:请输入您的代码。您的代码无法读取,因此很难发现错误,即使对我们来说也是如此。您尝试修改常量字符串…@Vova Makarovych程序未定义bahvior。您不能更改字符串文字。此外,参数的类型与函数的类型不对应离子参数。您正试图将一个
常量字符*
(不可修改的字符串)传递给需要
字符*
(可修改的字符串)的函数。这不起作用。您正在将一个
常量char*
传递给一个
char*
。这充其量是有潜在问题的。查找UPD。我重写了函数如何替换isconsonant lambda函数?你说的“替换”是什么意思?为什么?这也不是lamba。
char * ReplacedConsonant( char *str, char c = '!' );
if ( IsConsonant( str[index] ) ) str[index] = c;
std::string ReplacedConsonant(std::string str)
{
    std::replace_if(str.begin(), str.end(), IsConsonant, '!');

    return str;
}

int main()
{
    std::string ch = "I like this";
    std::string res = ReplacedConsonant(ch);

    std::cout << res;
}