C语言 如何在二维数组中找到最大的字?

oiopk7p5  于 2022-12-02  发布在  其他
关注(0)|答案(2)|浏览(139)

我有一个包含15个不同国家名称的数组,我需要创建一个函数,找到最大的国家名称并返回其索引,如果有多个国家名称的最大长度相等,则只需返回其中一个索引即可(如下所示)。
我承认我对c还很陌生。但是我已经尝试过使用strlen()和strcmp()函数了。我知道我可能在这里遗漏了一些重要的东西,但是任何帮助都会比我现在所做的更好。提前感谢!
以下是我认为可行的方法:

int maxCountry(char countryNames[15][50]){

int i, x = 0, length, length2, returnVal;
char string[50], string2[50];
  
  for(i = 0; i < 15; i++){
      string = countryNames[i] ;
      length = strlen(string);
      string2 = countryNames[x];
      length2 = strlen(string2);
      
      if(length < length2){
        returnVal = x;
        x = i;
      }
  }

  return returnVal;
}
nx7onnlm

nx7onnlm1#

我有麻烦遵循您的代码的逻辑,我认为它做了一些不需要的操作。
下面是我的尝试,有以下明显的变化:

  • 将数组视为字串数组,而非2D数组。
  • 传入字符串数。
  • 返回最长字符串的索引,如果出错,则返回-1。
#include <stdio.h>
#include <string.h>

int longest(const char **s, size_t n)
{
  size_t maxlen = 0;
  int maxpos = -1;

  for (size_t i = 0; i < n; ++i)
  {
    const size_t len = strlen(s[i]);
    if (len > maxlen)
    {
      maxlen = len;
      maxpos = (int) i;
    }
  }
  return maxpos;
}
 
int main(void)
{
  const char *s[] = { "foo", "hello", "you", "monster", "test" };
  printf("The longest is at %d\n", longest(s, sizeof s / sizeof *s));
  return 0;
}

这将打印:

The longest is at 3
xesrikrc

xesrikrc2#

您不需要2个变量,并且您希望与存储的长度(初始化为0)进行比较

int maxCountry(char (*countryNames)[50], size_t countries)
{
    size_t max_length = 0;
    int result = 0;

    for(size_t i = 0; i < countries; i++)
    {
        size_t length = strlen(countryNames[i]);

        if (length > max_length)
        {
            max_length = length;
            result = i;
        }
    }
    return result;
}

相关问题