C 类似于挤压()的用户定义函数

C 类似于挤压()的用户定义函数,c,C,所以我试着在K&R中做练习。它想让我做一个类似于挤压的函数,我不知道它有什么问题。我已经查过了。我不想在网上找到解决方案,我想知道为什么我的代码不起作用 //removes characters that are present in both strings #include <stdio.h> #include <conio.h> #include <stdlib.h> #define MAXLTR 15 void removesame(char s1[

所以我试着在K&R中做练习。它想让我做一个类似于挤压的函数,我不知道它有什么问题。我已经查过了。我不想在网上找到解决方案,我想知道为什么我的代码不起作用

//removes characters that are present in both strings
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define MAXLTR 15

void removesame(char s1[],char s2[]);

int main(void)
{
    char string1[MAXLTR],string2[MAXLTR];
    printf("Enter a string: ");
    scanf("\n%s",&string1);
    printf("\nEnter the letters/words to be removed: ");
    scanf("\n%s",&string2);
    removesame(string1,string2);
    printf("\nFinal output: %s",string1);
    getch();
}

void removesame(char s1[],char s2[])
{
    char temp[MAXLTR];
    int arraycntr,comparecntr;
    for(comparecntr = 0; comparecntr < MAXLTR; comparecntr++)
    {
        for(arraycntr = 0;arraycntr < MAXLTR;arraycntr++)
        {
            if(s1[arraycntr] == s2[arraycntr])
                s1[arraycntr] == '\t';
        }
    }
    comparecntr = 0;
    for(arraycntr = 0; arraycntr < MAXLTR; arraycntr++)
    {
        if(s1[arraycntr] != '\t')
        {
            temp[comparecntr] = s1[arraycntr];
            ++comparecntr;
        }
    }        
    for(arraycntr = 0; arraycntr < MAXLTR; arraycntr++)
        s1[arraycntr] = '\0';
    for(arraycntr = 0;arraycntr < MAXLTR; arraycntr++)
        s1[arraycntr] = temp[arraycntr];

}
//删除两个字符串中的字符
#包括
#包括
#包括
#定义maxltr15
void removesame(char s1[],char s2[]);
内部主(空)
{
字符string1[MAXLTR],string2[MAXLTR];
printf(“输入字符串:”);
scanf(“\n%s,&string1”);
printf(“\n输入要删除的字母/单词:”);
scanf(“\n%s”,&string2);
移除名称(string1、string2);
printf(“\n最终输出:%s”,string1);
getch();
}
void removesame(字符s1[],字符s2[]
{
字符温度[MAXLTR];
int arraycntr,comparecntr;
for(comparecntr=0;comparecntr
这不是作业,而是平等测试:

s1[arraycntr] == '\t'; 
你的意思是:

s1[arraycntr] = '\t';
如果使用高警告级别编译,编译器可能会发出一条消息,提醒您注意这一点。Microsoft VC编译器发出以下警告:

C:\devel\cpp\stackoverflow\main.C(32):警告C4553:“==”:运算符无效;你打算用“=”吗

for
的初始
循环仅检查
s1
s2
在相同索引中是否具有相同的值,它不检查
s1
中的字符是否存在于
s2
中的任何位置。
循环的
上的终止条件也应该是
s1
s2
的长度,而不是
MAXLTR

size_t arraycntr,comparecntr;
for(comparecntr = 0; comparecntr < strlen(s2); comparecntr++)
{
    for(arraycntr = 0;arraycntr < strlen(s1) ;arraycntr++)
    {
        if(s1[arraycntr] == s2[comparecntr])
            s1[arraycntr] = `\t`;
    }
}
temp
在任何地方都没有初始化,因此包含随机数据,除了刚才在
中为
输入的数据之外。如果
temp
中没有空终止符,
s1
也将以没有空终止符结束(您可能会看到随后打印的垃圾)。最后,在填充
s1
时,只需
strlen(temp)+1

for(arraycntr = 0;arraycntr < strlen(temp) + 1; arraycntr++)
    s1[arraycntr] = temp[arraycntr];

这不是分配,而是平等性测试:

s1[arraycntr] == '\t'; 
你的意思是:

s1[arraycntr] = '\t';
如果使用高警告级别编译,编译器可能会发出一条消息,提醒您注意这一点。Microsoft VC编译器发出以下警告:

C:\devel\cpp\stackoverflow\main.C(32):警告C4553:“==”:运算符无效;你打算用“=”吗

for
的初始
循环仅检查
s1
s2
在相同索引中是否具有相同的值,它不检查
s1
中的字符是否存在于
s2
中的任何位置。
循环的
上的终止条件也应该是
s1
s2
的长度,而不是
MAXLTR

size_t arraycntr,comparecntr;
for(comparecntr = 0; comparecntr < strlen(s2); comparecntr++)
{
    for(arraycntr = 0;arraycntr < strlen(s1) ;arraycntr++)
    {
        if(s1[arraycntr] == s2[comparecntr])
            s1[arraycntr] = `\t`;
    }
}
temp
在任何地方都没有初始化,因此包含随机数据,除了刚才在
中为
输入的数据之外。如果
temp
中没有空终止符,
s1
也将以没有空终止符结束(您可能会看到随后打印的垃圾)。最后,在填充
s1
时,只需
strlen(temp)+1

for(arraycntr = 0;arraycntr < strlen(temp) + 1; arraycntr++)
    s1[arraycntr] = temp[arraycntr];

顺便说一句,我只是把它放在那里,因为我使用strcpy()来检查最后一部分是否错误。如果编译器没有对
s1[arraycntr]=='\t'发出警告它可能非常糟糕或配置不正确。你应该会得到一个类似“null语句”、“代码无效”等的警告。顺便说一句,我只是把它放在那里,因为我使用strcpy()检查最后一部分是否错误。如果编译器没有对
s1[arraycntr]=='\t'发出警告它可能非常糟糕或配置不正确。你应该得到一个类似“空语句”、“代码无效”等的警告,谢谢!我没注意到,但它还是不起作用:/我正在努力找出逻辑出了什么问题,谢谢!我没有注意到,但它仍然不起作用:/i我试图找出逻辑的错误