C从字符串中删除多个字母
我输入两个字符串(string1和string2)。我需要做的是从string1中删除字符串2中的所有字母。例如,string1=“abcdefghi”,string2=“afbdh”,output=“cegi”。现在它只删除一个字母 我试图循环*str3,但我认为在第一次迭代之后,*str2没有回到str3[0]C从字符串中删除多个字母,c,string,pointers,while-loop,C,String,Pointers,While Loop,我输入两个字符串(string1和string2)。我需要做的是从string1中删除字符串2中的所有字母。例如,string1=“abcdefghi”,string2=“afbdh”,output=“cegi”。现在它只删除一个字母 我试图循环*str3,但我认为在第一次迭代之后,*str2没有回到str3[0] void rmstr(char *str2, char *str3) { char *p=str2; printf("Old String: %s", str2);
void rmstr(char *str2, char *str3)
{
char *p=str2;
printf("Old String: %s", str2);
while(*str2)
{
if(*p != *str3)
*str2++=*p;
p++;
}
}
这里的技巧是使用两个指针,一个用于阅读,一个用于写作:
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。这里的技巧是使用两个指针,一个用于读取,一个用于写入:
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。另一种方法:
#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;
}
#包括
#包括
void rmstr(字符*str2,字符*str3,字符*str4)
{
char*pch=NULL;
int i=0,j=0;
printf(“旧字符串1:%s\n”,str2);
printf(“旧字符串2:%s\n”,str3);
对于(j=0;j另一种方法:
#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;
}
#包括
#包括
void rmstr(字符*str2,字符*str3,字符*str4)
{
char*pch=NULL;
int i=0,j=0;
printf(“旧字符串1:%s\n”,str2);
printf(“旧字符串2:%s\n”,str3);
对于(j=0;j,这里没有指针
事实上,有很多解决方案可以做到这一点
我试过的一个在这里
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];
}
string fStr=“bhardwaj”,sStr=“dev”;
char[]tStr=新字符[fStr.Length];
整数计数=-1,j;
对于(j=0;j
这里有无指针
事实上,有很多解决方案可以做到这一点
我试过的一个在这里
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];
}
string fStr=“bhardwaj”,sStr=“dev”;
char[]tStr=新字符[fStr.Length];
整数计数=-1,j;
对于(j=0;j
在下面找到代码
#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);
}
#包括
#包括
int main()
{
字符s1[20]={0},s2[20],r[20]={0},t[26]={0};
int i=0,j=0;
scanf(“%s”,s1);
scanf(“%s”,s2);
对于(i=0;i在下面找到代码
#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);
}
#包括
#包括
int main()
{
字符s1[20]={0},s2[20],r[20]={0},t[26]={0};
int i=0,j=0;
scanf(“%s”,s1);
scanf(“%s”,s2);
对于(i=0;i你忘了问问题。当你按下标有“问问题”
的按钮时,你应该问一个问题。string1中的字母可以重复吗?@learner,我知道,只是在作业的第一部分从整个字符串中删除了一个字符,所以现在我面临这个问题,这就是我要问的必须使用。请参考此链接了解您的解决方案。算法应该是:a)创建新的空字符串b)迭代“string1”中的所有字符,c)添加到新字符串,除非它们出现在“字符串二”中。您忘记问问题。当您按下标有“问问题”
的按钮时,您应该问一个问题。字符串1中的字母可以重复吗?@learner,我知道,这只是作业的第一部分从整个字符串中删除了一个字符,现在我面临这个问题,这就是我必须解决的问题。请参考此链接以获得解决方案。算法应该是:a)创建新的空字符串b)迭代“string1”中的所有字符,并将其添加到新字符串中,除非它们出现在“string two”中。这看起来不像c:)它的c#,但两者的逻辑是相同的。不一样,我希望你教我如何string.Length
在c
中为该字符数组,1)循环每个元素,2)检查该元素是否为!='\0',3)每个I迭代增加一个变量。这看起来不像C:)它的C#,但两者的逻辑是相同的。不一样,我希望你教我如何字符串。长度在C
中,对于该字符数组,1)循环每个元素,2)检查该元素是否!='\0',3)对于每个迭代增加一个变量。你没有完美地解决我的问题。但是你的代码让我想到在“rmstr”函数中调用我的“rmchr”函数,从而得到我想要的正确输出。非常感谢。你没有完全解决我的问题。但是你的代码让我想到在“rmstr”函数中调用我的“rmchr”函数,从而得到我想要的正确输出。非常感谢。