任务 - 该函数采用字符串作为输入。因此,它应该创建并返回一个新字符串,其中包含该字符串中仅出现一次的所有字符。
我的代码
сhar* findOneCString(const char* str)
{
const size_t size = strlen(str);
char* strNew = new char[size + 1];
int num = 0;
for (size_t index = 0; index < size; ++index)
{
for (size_t j = size; j > index; --j)
{
if (str[index] == str[j])
{
}
else
{
strNew[num] = str[index];
++num;
}
}
}
strNew[num] = '\0';
return strNew;
}
我收到错误,但我不明白为什么(
- 内存泄漏
- 这些值被写入新数组几次。
我知道对于大多数人来说这个任务很容易..但我不明白我哪里做错了
如果我们使用new[]分配内存,那么我们使用delete[]释放它。一般来说,返回指向某处已分配内存的指针并不是一个好主意。当分配内存的人释放它时,情况会好得多。您可以将指向已准备好的缓冲区的指针传递给该函数。
无需为结果分配 strlen(str) + 1 个字符。你仍然无法获得超过 256 个。
结论:
如果需要保留字符顺序:
结论:
我稍微纠正了你的代码,主要是它的内部循环:
测试:
显示
解释:
无需将给定字符串(参数)的字符与同一字符串的字符进行比较。
最好将它们与新行的字符进行比较
strNew,我们首先将其清空,然后逐渐添加该行str中不存在的字符。