【问题标题】:Program to remove a specified character from a string - empty spaces causes assert to fail从字符串中删除指定字符的程序 - 空格导致断言失败
【发布时间】:2020-11-12 15:36:41
【问题描述】:

我正在尝试从字符串中删除给定的字符,并且大部分情况下我的代码都在工作,但是当我将“”指定为字符串并将“”​​指定为字符时,我的断言失败了。

#include <stdio.h>
#include <string.h>
#include <assert.h>

void strrem(const char* s1, const char c, char* s2);

int main(void)
{

   char str[1000];

   strrem("abc", 'b', str); assert(strcmp(str,"ac")==0);
   strrem("ABC", 'a', str); assert(strcmp(str,"ABC")==0);
   strrem("Hello World!", '!', str); assert(strcmp(str,"Hello World")==0);
   strrem("", ' ', str); assert(strcmp(str,"")==0);

   return 0;
}

void strrem(const char* s1, const char c, char* s2)
{
   int i, j;
   int strlngth = strlen(s1);


   for (i = 0, j = 0; i < strlngth; i++) {
      if(s1[i] != c) {
         s2[j++] = s1[i];
      }


      s2[j] = '\0';
   }
}

【问题讨论】:

    标签: arrays c char


    【解决方案1】:

    不要在每个循环中不断分配空字节然后覆盖它,而是在循环之后分配它,这也解决了您的问题(当您的代码从不循环时不分配空字节):

    #include <stdio.h>
    #include <string.h>
    #include <assert.h>
    
    void strrem(const char* s1, const char c, char* s2);
    
    int main(void)
    {
    
       char str[1000];
    
       strrem("abc", 'b', str); assert(strcmp(str,"ac")==0);
       strrem("ABC", 'a', str); assert(strcmp(str,"ABC")==0);
       strrem("Hello World!", '!', str); assert(strcmp(str,"Hello World")==0);
       strrem("", ' ', str); assert(strcmp(str,"")==0);
    
       return 0;
    }
    
    void strrem(const char* s1, const char c, char* s2)
    {
       int i, j;
       int strlngth = strlen(s1);
    
    
       for (i = 0, j = 0; i < strlngth; i++) {
          if(s1[i] != c) {
             s2[j++] = s1[i];
          }
    
    
       
       }
       // this is now after the loop
       s2[j] = '\0';
    }
    

    【讨论】:

    • 这很简单。谢谢你的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-20
    相关资源
    最近更新 更多