dumpling
dumpling

Reputation: 1

How to find the biggest word in a 2D array?

I have an array that has a list of 15 different country names. I have to create a function that finds the largest name and returns its index, and if there are more then one that have a maximum length equivalent to each other it only has to return 1 of the indexes to the names. (Example below).

I'll admit and say I'm quite new to c. But have tried using the strlen(), and the strcmp() functions. I know I'm probably missing something huge here, but any help would be better then where I'm at now. Thanks in advance!

Here's what I thought would work:

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;
}

Upvotes: 0

Views: 98

Answers (1)

unwind
unwind

Reputation: 399949

I had trouble following your code's logic, I think it does a few operations that are not needed.

Here's my attempt at it, with the following obvious changes:

  • Treat the array as an array of strings, not a 2d array.
  • Pass in the number of strings.
  • Return the index of the longest string, or -1 on error.

#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;
}

This prints:

The longest is at 3

Upvotes: 2

Related Questions