【问题标题】:delete repetition in strings删除字符串中的重复
【发布时间】:2015-12-15 17:38:59
【问题描述】:

我想用 c 语言编写代码来删除字符串 s1 中与字符串 s2 中的任何字符匹配的任何字符。仅使用 for 循环。那就是我的试验失败了 -_- 。 例如,如果 s1="ahmed" 和 s2="omnia" 应该将 s1 编辑为 >> s1="hed"

#include <stdio.h>
#include <stdlib.h>

int i,j;
int k;
int counter=0;

int main()                         
{
      char s1[100];
      char s2[10];
      char temp[100];

      printf("\n enter string 1: ");
      scanf("%s",s1);

      printf("\n enter string 2: ");
      scanf("%s",s2);

     printf("\n%s",s1);
     printf("\n%s",s2);

      for(j=0;j<9;j++)
      {
         for(i=0;i<9;i++)
         {
            if(s1[i]!=s2[j]&&s1[i]!='\0')
             {
                 temp[counter++]=s1[i];      //add unique items to temp
                 k=counter;                   //size
                 temp[counter]='\0';           
             }
         }
      }
              for(i=0;i<k;i++)
              {
                 s1[i]=temp[i];
              }
        printf("\nstring 1 after delete : ");
        printf("%s",s1);
    return 0;
}

如何将一个项目与嵌套项目进行比较然后达到一个条件??

【问题讨论】:

  • 请编辑您的问题并添加一个或多个输入示例和预期输出。请正确格式化您的代码。
  • 具体来说,我们需要MCVE,以及准确的输入/输出以及错误消息,正如@MichaelWalz 所说。

标签: c for-loop iteration


【解决方案1】:

为什么在if 语句中包含空字符语句? 在两个for 循环之后尝试这两个语句,就像这样。 请缩进您的代码

for(j=0;j<strlen(s1);j++) //Why is it 9 in your code? It should be the respective lengths
{
    for(i=0;i<strlen(s2);i++)
    {
        if(s1[i]!=s2[j]&&s1[i]!='\0')
        {
            temp[counter++]=s1[i];          
        }
    }
}
k=counter;                   
temp[counter]='\0';

并包括:#include&lt;string.h&gt;

【讨论】:

  • 谢谢大家^_^ & 欢迎任何其他反馈或答案。
【解决方案2】:

我在这里没有看到任何编码错误,只是你的逻辑有缺陷。

这应该可行

for (j = 0; j < 9; j++)
{
    for (i = 0; i < 9; i++)
    {
        if (s1[j] == s2[i] && s1[i] != '\0')
        {
            break;
        }
        else if (i == strlen(s2))
        {
            temp[counter++] = s1[j];
        }
    }
}
temp[counter] = '\0';
for (i = 0; i < counter; i++)
{
    s1[i] = temp[i];
}
printf("\nstring 1 after delete : ");
printf("%s", s1);

在您的原始代码中,您一直从头开始读取原始字符串,而不是每次都推进迭代器。

所以在第一次迭代中,您将“ahmed”与“omnia”进行了比较,这很好。 但在第二次迭代中,您将 'ahmed' 与 'omnia' 进行了比较,而不是 'hmed' 与 'omnia' 进行了比较,这就是为什么您在输出中会大量重复原始字符串。

另外,我首先将 s1 和 s2 的内存设置为 0。

【讨论】:

    猜你喜欢
    • 2013-11-12
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 2012-05-09
    相关资源
    最近更新 更多