C 类似于挤压()的用户定义函数
所以我试着在K&R中做练习。它想让我做一个类似于挤压的函数,我不知道它有什么问题。我已经查过了。我不想在网上找到解决方案,我想知道为什么我的代码不起作用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[
//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我试图找出逻辑的错误