我无法在命令提示符下键入第二个输入,它说我的程序已停止。我只是尝试自己的代码。 我添加了两个函数来检查字符串的长度和内容。 而且我可以简单地使用strcmp(),但是我避免将其用于练习。
#include<stdio.h>
#include<string.h>
int lencompare(char *str1, char *str2){
int len1, len2;
len1 = strlen(str1);
len2 = strlen(str2);
return (len1==len2) ? 1 : 0;
}
int compare(char *str1, char *str2){
int i =0, flag=0;
if(lencompare(str1, str2)==1){
while(*(str1+i) != '\0');
{
if(*(str1+i) == *(str2+i))
flag = 1;
else
flag = 0;
i++;
}
return flag;
}
if(lencompare(str1, str2) == 0){
printf("Length is Different");
}
}
int main(){
char *str1 , *str2 ;
fgets(str1, 20, stdin);
fgets(str2, 20, stdin);
if(compare(str1, str2) == 1){
printf("both length and content are same");
}
return 0;
}
答案 0 :(得分:6)
对于初学者来说,这些变量
char *str1 , *str2 ;
未初始化。因此,该程序已经具有未定义的行为。您需要声明字符数组,例如
enum { N = 20 };
char str1[N], str2[N];
如果字符数组中有足够的空间,则标准函数fgets
可以将新行字符'\n'
附加到输入的字符串中。
您应该删除此字符。例如
fgets(str1, 20, stdin);
fgets(str2, 20, stdin);
str1[ strcspn( str1, "\n" ) ] = '\0';
str2[ strcspn( str2, "\n" ) ] = '\0';
函数lencompare
的声明和定义应类似于
int lencompare( const char *str1, const char *str2 )
{
return strlen( str1 ) == strlen( str2 );
}
函数compare
具有未定义的行为,因为在某些执行路径中,它不返回任何内容。
也应该像这样声明
int compare( const char *str1, const char *str2 );
在函数中,您两次调用函数lencompare
:
if(lencompare(str1, str2)==1){
和
if(lencompare(str1, str2) == 0){
程序可以按照以下方式显示
#include <stdio.h>
#include <string.h>
int lencompare( const char *str1, const char *str2 )
{
return strlen( str1 ) == strlen( str2 );
}
int compare( const char *str1, const char *str2 )
{
int equal = lencompare( str1, str2 );
if ( equal )
{
while ( *str1 == *str2 && *str1 )
{
++str1;
++str2;
}
equal = *str1 == *str2;
}
return equal;
}
int main(void)
{
enum { N = 20 };
char str1[N], str2[N];
fgets( str1, sizeof( str1 ), stdin );
fgets( str2, sizeof( str2 ), stdin );
str1[ strcspn( str1, "\n" ) ] = '\0';
str2[ strcspn( str2, "\n" ) ] = '\0';
if ( compare( str1, str2 ) )
{
puts( "both length and content are same" );
}
return 0;
}
其输出可能看起来像
Sridhar
Sridhar
both length and content are same
请注意,您可以使用标准C函数compare
代替函数strcmp
中的while循环。在这种情况下,功能比较将非常简单
int compare( const char *str1, const char *str2 )
{
return strcmp( str1, str2 ) == 0;
}
实际上,不需要初步比较字符串的长度。