gpt4 book ai didi

c - 打印最长的字符串和字符串长度?

转载 作者:太空宇宙 更新时间:2023-11-04 07:57:14 26 4
gpt4 key购买 nike

我是 c 编程的新手,我想编写一个代码来从字符串数组中找到最长的字符串及其长度。到目前为止,这是我的代码。

#include <stdio.h>
#include <string.h>
#define N 20
char *longestStrInAr(char str[N][40], int size, int *length);
int main()
{
int i, size, length;
char str[N][40], first[40], last[40], *p;
char dummychar;

printf("Enter array size: \n");
scanf("%d", &size);
scanf("%c", &dummychar);
for (i=0; i<size; i++) {
printf("Enter string %d: \n", i+1);
gets(str[i]);
}
p = longestStrInAr(str, size, &length);
printf("longest: %s \nlength: %d\n", p, length);
return 0;
}
char *longestStrInAr(char str[N][40], int size, int *length)
{
int i,j=0;
int len = 0;
*length = 0;
char word[N];
for(i=0;i<size;i++){
while(str[i][j]!='\0'){
len++;
j++;
}
if(*length<len){
*length = len;
strcpy(word,str[i]);
}
}
return word;
}

main{} 是一个给定的函数,*longestStrInAr 下的代码是我想写的。但是,我当前的代码只能给我最长的字符串长度,并打印出 (null) 而不是最长的字符串。 my output

最佳答案

我看到的问题:

问题1

不要使用gets。这是一个安全漏洞。请改用 fgets

fgets(str[i], 40, stdin);

问题2

您使用的 word 大小不正确。它的大小必须为 40

char word[40];

问题3

你正在返回一个指向 word 的第一个元素的指针longestStrInArr。但是,一旦函数返回,该内存就无效了。因此,您的程序具有未定义的行为。

您可以通过返回 str 中最长字符串的索引或提供足够长的输入参数来容纳最长字符串来修复它。

size_t longestStrInAr(char str[N][40], int size, int *length)
{
size_t index = 0
size_t i,j=0;
int len = 0;
*length = 0;

for(i=0;i<size;i++){
while(str[i][j]!='\0'){
len++;
j++;
}
if(*length<len){
*length = len;
index = i;
}
}
return index;
}

然后将其用作:

size_t index = longestStrInAr(str, size, &length);
printf("longest: %s \nlength: %d\n", str[index], length);

关于c - 打印最长的字符串和字符串长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49187487/

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