【问题标题】:c++ replace what with with on char array(string)c ++用字符数组(字符串)替换什么
【发布时间】:2016-04-10 22:46:38
【问题描述】:

我的任务是编写一个函数char * stringReplace(const char * str, const char * what, const char * with),它用正确长度的新字符串将“what”替换为“with”。所以在函数内部我创建了函数返回的动态数组。但我的问题是如何删除它,因为如果我尝试在主函数中删除它,在我使用它之后,它说它是未定义的。不是没有范围的动态数组还是我错了? 这是我的代码:

#include <iostream>

#include <string.h>

using namespace std;

bool areTheSame(const char * str, const char * what, unsigned p)
{


   return areEqual;
}


unsigned howManyTimes(const char * str, const char * what)
{

}


char * stringReplace(const char * str, const char * what, const char * with) 
{

}

int main()
{
   char str[1000];
   char what[1000];
   char with[1000];

   cout << "Enter your string\n";
   cin.getline(str, 1000);

   cout << "\nEnter \"what\" you want to replace\n";
   cin.getline(what, 1000);

   if (strlen(str) < strlen(what))
   {
      cout << "\"What\" contains more characters than the string!\n";
      return 0;
   }

   cout << "\nEnter with what you want to replace it\n";
   cin.getline(with, 1000);

   cout << "\nYour string with replaced words looks like\n";
   cout << stringReplace(str, what, with) << endl;

   return 0;
}

P.S 我删除了部分代码,因为我找到了我想要的答案,还有时间完成任务,我不确定我是否可以公开发布我的代码

【问题讨论】:

  • 嗯...我在您的主要功能中看不到任何delete。如果您将stringReplace 的结果存储在变量中,它应该可以工作,如果delete 是非空的,它应该可以工作。
  • 在 main() 中将 stringReplace(str, what, with) 的返回值放入 char* 类型的变量中。然后删除cout后面的[]。

标签: c++ arrays string dynamic char


【解决方案1】:

您必须删除它以避免内存泄漏。你可以这样做:

int main()
{
   char str[1000];
   char what[1000];
   char with[1000];
   char *replaced;

   cout << "Enter your string\n";
   cin.getline(str, 1000);

   cout << "\nEnter \"what\" you want to replace\n";
   cin.getline(what, 1000);

   if (strlen(str) < strlen(what))
   {
      cout << "\"What\" contains more characters than the string!\n";
      return 0;
   }

   cout << "\nEnter with what you want to replace it\n";
   cin.getline(with, 1000);

   cout << "\nYour string with replaced words looks like\n";
   replaced = stringReplace(str, what, with);
   cout << replaced << endl;
   delete [] replaced;

   return 0;
}

但是请注意,这不是拆分分配/解除分配责任的最佳做法。

【讨论】:

  • 这是 C++,不是 C,replaced 应该在第一次使用的地方声明和初始化。
  • @Slava 为什么要这样做?据我所知,这只是可读性和使用约定的问题。
  • 因为可读性不仅仅是。这是编写无错误代码最重要的部分之一。
  • tnx 伙计们,我写了“char* 替换 = stringReplace(str, what, with); delete[] 替换;” 我觉得现在很酷。我知道这不是最好的方法,但任务是以这种方式给出的,我不能在函数参数或 smth 中添加 smth else。
  • 最终他们会教你 C++ 并且处理 char 数组而不是 std::string 的痛苦将会解决,
猜你喜欢
  • 2019-02-26
  • 2014-03-21
  • 2013-11-08
  • 1970-01-01
  • 2012-04-26
  • 1970-01-01
  • 1970-01-01
  • 2010-09-28
  • 1970-01-01
相关资源
最近更新 更多