我输入了两个字符串(string1和string2)。我需要做的是删除string1中字符串2中的所有字母。 EX。 string1 =“abcdefghi”,string2 =“afbdh”,output =“cegi”。现在它只删除一个字母。
我试着循环* str3,但我认为在第一次迭代后,* str2没有回到str3 [0]
void rmstr(char *str2, char *str3)
{
char *p=str2;
printf("Old String: %s", str2);
while(*str2)
{
if(*p != *str3)
*str2++=*p;
p++;
}
}
答案 0 :(得分:3)
就在这里。
实际上,有很多解决方案可以实现。
我试过的就是
string fStr = "bhardwaj", sStr = "dev";
char[] tStr = new char[fStr.Length];
int count = -1, j;
for (j = 0; j < tStr.Length; j++)
tStr[j] = ' ';
for (int i = 0; i < fStr.Length; i++)
{
for (j = 0; j < sStr.Length; j++)
if (fStr[i] == sStr[j]) break;
if (j == sStr.Length)
tStr[++count] = fStr[i];
}
答案 1 :(得分:2)
这里的技巧是使用两个指针,一个用于阅读,一个用于写作:
char *r, *w;
r = w = str1;
while (*r) {
if (strchr(str3, *r) == NULL) {
++w; // advance write pointer
}
++r; // advance read pointer
}
*w = '\0'; // null terminate
或者,使用一个中间字符串,然后将其复制回str2
。
答案 2 :(得分:0)
另一种方法:
#include<stdio.h>
#include<string.h>
void rmstr(char *str2, char *str3, char *str4)
{
char *pch=NULL;
int i=0,j=0;
printf("Old String1: %s\n", str2);
printf("Old String2: %s\n", str3);
for(j=0;j<strlen(str2);j++)
{
char tmp[2] = {str2[j], '\0'};
pch = strstr(str3, tmp);
if (pch == NULL)
{
str4[i] = str2[j];
i++;
}
}
str4[i]='\0';
}
int main()
{
char str1[] = "abcdefghi";
char str2[] = "afbdh";
char str3[256];
rmstr(str1,str2,str3);
printf("New string is: %s\n",str3);
return 0;
}
答案 3 :(得分:0)
找到下面的代码
#include <stdio.h>
#include <string.h>
int main ()
{
char s1[20] = { 0 }, s2[ 20], r[20] = {0}, t[ 26] = { 0};
int i=0,j=0;
scanf ("%s",s1);
scanf ("%s",s2);
for (i=0; i<strlen (s2); ++i)
{
t[s2[i]-'a'] = 1;
}
for (i=0; i<strlen (s1); ++i)
{
if (!t[s1[i]-'a'])
{
r[j]=s1[i];
j++;
}
}
r[j]='\0';
printf ("result:%s\n", r);
}
1.找到s2中的字符
2.通过排除s2的字符来计算s1中的结果字符串。