gpt4 book ai didi

c - 我检查字符串内容和长度的程序有一些问题

转载 作者:行者123 更新时间:2023-12-02 08:00:10 25 4
gpt4 key购买 nike

我无法在命令提示符中键入第二个输入,它说我的程序已停止。我只是在尝试我自己的代码。我添加了两个函数来检查字符串的长度和内容。我可以简单地使用 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;
}

最佳答案

对于初学者来说,这些变量

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 函数 strcmp,而不是函数 compare 中的 while 循环。在这种情况下,函数比较将非常简单

int compare( const char *str1, const char *str2 )
{
return strcmp( str1, str2 ) == 0;
}

其实根本不需要比较字符串的长度。

关于c - 我检查字符串内容和长度的程序有一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58288776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com