【问题标题】:Function which will delete part of string删除部分字符串的函数
【发布时间】:2019-05-29 12:42:43
【问题描述】:

我需要创建一个删除部分字符串的函数。我只能使用 stdio.h 和 stdlib.h。

例如:我有这个字符串:“Dad and mom /* and sister */ are at home”。我需要删除以/* 开头并以*/ 结尾的部分。所以结果将是“Dad and mom are at home”。

【问题讨论】:

  • 在您的示例中,没有 */ 结尾文本。
  • @tadman:降价吃掉了明星。
  • 是否只有一对/**/ 因为它简化了代码?

标签: c string substring


【解决方案1】:

您可以使用strstr (https://www.tutorialspoint.com/c_standard_library/c_function_strstr.htm) 查找开始分隔符,然后再次查找结束分隔符。

然后你可以使用memmove (http://www.cplusplus.com/reference/cstring/memmove/) 来移动字符串的剩余部分。

如果您可以删除多个部分,那么您可以循环执行。

首先尝试在纸上进行,然后尝试调试您的程序,看看它是否按照您的预期进行。

【讨论】:

    【解决方案2】:

    C 并没有真正的“字符串”作为你可以使用的类型。相反,C“字符串”是一个概念——内存中的字符序列,以 NUL 字符结尾。因此,要对字符串做任何事情,您需要了解内存管理。

    一般来说,初级程序员(和示例)使用固定大小的数组以及静态(常量)字符串和假定适合的固定大小数组中的字符串混合使用(您应该始终检查)。

    所以在你的情况下,你只是说你“有一个字符串”——但不要说你如何或在哪里“拥有”它。如果您将它放在足够大的内存缓冲区中以容纳它,那么您可以修改缓冲区以包含(较短的)所需的字符串。或者你可以将它复制到另一个足够大的缓冲区来保存修改后的字符串。那将是两个非常不同的 C 函数,它们都可以被描述为“删除字符串的一部分”

    【讨论】:

      【解决方案3】:

      str 必须是可修改的

      #include <stdio.h>
      #include <string.h>
      
      
      char *RemoveComment(char *str)
      {
          char *start;
          char *end;
      
      
          do
          {
              start = strstr(str, "/*");
              end = strstr(str, "*/");
              if(start && end && end > start)
              {
                  memmove(start, end + 2, strlen(end + 2) + 1);
              }
          }while (start && end);
          return str;
      }
      
      
      int main()
      {
      
          char text[] = "D/*ad a*/nd mom /* and sister */ ar/*e at*/ ho/*me*/";
          printf("%s\n", RemoveComment(text));
      
          return 0;
      }
      

      【讨论】:

      • 好吧,这似乎是一个家庭作业,你并没有真正通过提供完整的代码来帮助 OP 学习。
      猜你喜欢
      • 2017-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-31
      相关资源
      最近更新 更多