C 删除第一个字符串中第二个字符串中出现的所有字符
我有个小问题。 我有一个接受两个参数(两个字符串)的函数。例如: String1=“你好” String2=“狮子座” 我需要删除String1中String2的所有字符。在这种情况下,我的最终结果应该是:“h”。我需要合并指针时,这样做!到目前为止,我已经得到了这个代码,但它只是从“hello”中删除了“e”。我不知道为什么它不起作用。如果有人有更好或更有效的方法,请帮助C 删除第一个字符串中第二个字符串中出现的所有字符,c,linux,unix,system,C,Linux,Unix,System,我有个小问题。 我有一个接受两个参数(两个字符串)的函数。例如: String1=“你好” String2=“狮子座” 我需要删除String1中String2的所有字符。在这种情况下,我的最终结果应该是:“h”。我需要合并指针时,这样做!到目前为止,我已经得到了这个代码,但它只是从“hello”中删除了“e”。我不知道为什么它不起作用。如果有人有更好或更有效的方法,请帮助 void rmstr(char str1[], char str2[]) { //Pointers to traver
void rmstr(char str1[], char str2[])
{
//Pointers to traverse two strings
char *p_str1 = &str1[0];
char *p_skip;
int length = (int)strlen(str2);
int i;
while(*p_str1 != '\0')
{
for (i = 0; i < length; i++)
{
if(*p_str1 == str2[i])
{
for(p_skip = p_str1; *p_skip == str2[i]; ++p_skip);
memcpy(p_str1, p_skip, &str1[strlen(str1)+1] - p_skip);
}
if(*p_str1 != '\0')
{
++p_str1;
}
}
}
}
void rmstr(char str1[],char str2[]
{
//遍历两个字符串的指针
char*pu str1=&str1[0];
字符*p_跳过;
int长度=(int)strlen(str2);
int i;
而(*p_str1!='\0')
{
对于(i=0;i
char* rmstr(char *str1, char *str2, char *ans) {
char *p1 = str1;
char *p2 = str2;
char *res = ans;
while (*p1 != '\0') {
p2 = str2;
while (*p2 != '\0') {
if (*p1 == *p2) // A character in str1 is found inside str2
break;
p2++;
}
if (*p2 == '\0') { // No match found
*ans = *p1;
ans++;
}
p1++;
}
*ans = '\0';
return res;
}
测试代码:
int main(void) {
char str1[] = "hello";
char str2[] = "elo";
char ans[10];
printf(rmstr(str1, str2, ans));
return 0;
}
这个答案变量少,也许更容易阅读
#include "stdio.h"
/* check if c belongs to the second str */
int char_belong_to_str(char c, char *str)
{
while(*str)
if (c == *str++)
return 1;
return 0;
}
void rmstr(char str1[], char str2[])
{
int result_len = 0; /* saves the result str len*/
char * p_new = str1;
while (*str1)
{
char c = *str1;
if (!char_belong_to_str(c, str2)) /* if not found in str2, save it*/
{
*(p_new + result_len) = c;
++result_len;
}
++str1;
}
*(p_new+result_len) = '\0';
printf("%s \n", p_new);
}
int main()
{
char p1[] = "hello";
char p2[] = "elo";
rmstr(p1, p2);
return 0;
}
您正在推进通过
str2
前进的for
循环中的p\u str1
指针。它应该在这个循环之外。你想过这个吗?很明显,您的代码只在两个字符串中查找相同偏移量的字符,这显然无法解决该任务。如果你给字符串起的名字与扮演的角色有关,你的代码会更清晰。。。第二个字符串只是一个无序的字符集合。我经常认为我的代码是不言自明的。很多时候,我错了。你可能想描述一下什么是不同的以及为什么。非常感谢!唯一的问题是,我假设使用指针遍历字符串。。。因此,尽管这个程序有效,但它并不完全是我想要的。谢谢你,先生!你太棒了。谢谢你的意见!