删除字符串中的重复
delete repetition in strings
我想用 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]!='[=10=]')
{
temp[counter++]=s1[i]; //add unique items to temp
k=counter; //size
temp[counter]='[=10=]';
}
}
}
for(i=0;i<k;i++)
{
s1[i]=temp[i];
}
printf("\nstring 1 after delete : ");
printf("%s",s1);
return 0;
}
我怎样才能将一个项目与嵌套项目进行比较然后达到一个条件??
为什么要在 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]!='[=10=]')
{
temp[counter++]=s1[i];
}
}
}
k=counter;
temp[counter]='[=10=]';
并包括:#include<string.h>
我没有看到任何编码错误,只是你的逻辑有问题。
这应该有效
for (j = 0; j < 9; j++)
{
for (i = 0; i < 9; i++)
{
if (s1[j] == s2[i] && s1[i] != '[=10=]')
{
break;
}
else if (i == strlen(s2))
{
temp[counter++] = s1[j];
}
}
}
temp[counter] = '[=10=]';
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的内存memset为0。
我想用 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]!='[=10=]')
{
temp[counter++]=s1[i]; //add unique items to temp
k=counter; //size
temp[counter]='[=10=]';
}
}
}
for(i=0;i<k;i++)
{
s1[i]=temp[i];
}
printf("\nstring 1 after delete : ");
printf("%s",s1);
return 0;
}
我怎样才能将一个项目与嵌套项目进行比较然后达到一个条件??
为什么要在 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]!='[=10=]')
{
temp[counter++]=s1[i];
}
}
}
k=counter;
temp[counter]='[=10=]';
并包括:#include<string.h>
我没有看到任何编码错误,只是你的逻辑有问题。
这应该有效
for (j = 0; j < 9; j++)
{
for (i = 0; i < 9; i++)
{
if (s1[j] == s2[i] && s1[i] != '[=10=]')
{
break;
}
else if (i == strlen(s2))
{
temp[counter++] = s1[j];
}
}
}
temp[counter] = '[=10=]';
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的内存memset为0。