我正在处理一个接受3个C字符串的函数,我的目标是用他/她输入的单词替换用户在句子中找到的单词。
以下是我的功能代码:
void replaceSubstring(char str1[], char str2[], char str3[])
{
char *a= new char(sizeof(str1));
char *b= new char(sizeof(str1));
int len=0;
for(unsigned int ind= 0; ind< sizeof(str1); ind++)
{
for(unsigned ind1= 0; ind1< sizeof(str2); ind1++)
a[ind]= str1[ind+ ind1];
a[ind]= '\0';
if(strcmp(str1, str2))
{
for(unsigned int y= 0; y< sizeof(str3); y++)
{
b[len]= str3[y];
len++;
}
ind+= (sizeof(str2)- 1);
}
else
{
cout<< "Error! No match found!"<< endl;
}
}
cout<< b<< endl;
}
让我们展示一下我的输出示例:
输入一个字符串:我喜欢芒果
输入您要查找的字词:芒果
输入要替换的新单词&#34;芒果&#34;用:奶酪
输出?的chee─
任何人都可以解释我能做些什么来改善这个以及为什么会导致故障?任何信息都非常感谢。
PS:我尝试过使用strstr,但是strstr返回指针并将句子切断然后我很担心找出一种从句子末尾跳到字符的方法这个词是,并确定事后要做什么。如果可能的话,如果可能的话,我怎么能这样做而不用切断句子?
非常感谢你的帮助。
答案 0 :(得分:0)
将str1和str2与stcmp而不是a和str2进行比较。 当字符串相等时,Strcmp返回0(= false)。 b仅使用str3中的字符完成,并且不会从str1重新复制任何内容。
答案 1 :(得分:0)
您正在使用来自C的低级基元,其中您使用它的表单中的数组是指针的同义词。所以你的函数签名相当于:
void replaceSubstring(char *str1, char *str2, char *str3);
根据这一点,代码中sizeof()
的所有用法都是错误的,而不是字符串的长度,因为它假设它给出了平台上指针的大小。当您为2个指针分配内存并且从不释放它时,您也会发生内存泄漏:
char *a= new char(sizeof(str1));
char *b= new char(sizeof(str1));
您应该使用具有适当内存管理和字符串操作方法的std::string
。