Как найти максимальное слово в строке

Нужно найти самое длинное слово в строке. BAЖНО! Без класса string! проблема в том что код, не работает. и мне выводит всю строку вместо самого длинного слова

 #include <iostream>
    #include <locale>
    #include <cstring> 
    using namespace std;

int main()
{
    setlocale(LC_ALL, "rus");
    char S[100];
    int n, i, k, kol, max = 0, y,g,j=0;
    cin.getline(S, 100);
    int p;
    i = 0;
    for (int l=0;l<strlen(S);l++)//проходимся по длине строки, и ищем пробелы, и после каждого меряем слово.
    {
    while (S[l] != ' ')
    {
        if (S[l] == ' ')
        {
            p=l;
            l++;
        }
        else
        {

            do
            {
                l++;
            } while (S[l] != ' ');    //длина слова
             kol = strlen(S)-l-p; //длина слова  //p последний пробел
            if (kol > max)
            {
                l++;
                     ///max word
                max = kol;
            }

        }

     }
    }
    for (n; n<k; n++)
    {
        cout << S[n];
    }
    cout << " - самое длинное слово" << endl;

    system("pause");
}

задан 8 апр 2017 в 16:13

Awesome Man's user avatar

Awesome ManAwesome Man

6643 золотых знака15 серебряных знаков31 бронзовый знак

16

У вас на мой вкус сложновато…
Я бы делал так:

int main()
{
    const int STRLEN = 200;
    char s[STRLEN];
    cin.getline(s, STRLEN);

    size_t maxlen = 0;
    char * maxidx = nullptr;

    for(char * c = s; *c;)
    {
        while(*c == ' ') ++c;
        if (*c == 0) break;
        char * begin = c;
        while(*c && *c != ' ') ++c;
        if (maxlen < (c - begin))
        {
            maxlen = c - begin;
            maxidx = begin;
        }
    }
    if (maxlen == 0)
    {
        cout << "Empty line!n";
        return 0;
    }
    else
    {
        *(maxidx+maxlen) = 0;
        cout << maxidx;
    }
}

ответ дан 8 апр 2017 в 16:33

Harry's user avatar

HarryHarry

214k15 золотых знаков117 серебряных знаков229 бронзовых знаков

2

Не уверен что это поможет вам, вот рабочий код:

#include <iostream>

using namespace std;

int main() {
    // сторка
    char * theString = " dsjfkd1 sdf2 dsfkdsj3   sdfjsdkjfdsjf4   d5 ";
    char * theLetter = theString; // здесь будем хранить адрес очередного символа начинаяя с первого
    unsigned counter = 0, // счетчик подсчета букв в слове
        storage = 0; // здесь будем хранить количество букв самого большого слова

    while (*theLetter) { // повторять пока не прийдет нулевой символ конца
        theLetter++; // увеличиваем очерной адрес на размер символа

        if (*theLetter != ' ') // если не пробел
            counter++; // увеличиваем счетчик
        else
            if (counter > storage) { // если букв больше чем мы знали раньше ,
                storage = counter;   // то сохраним это число
                counter = 0; // апотом обнулим счетчик подсчета
            }
    }

    cout << storage << endl; // результат
}

ответ дан 8 апр 2017 в 16:55

perfect's user avatar

perfectperfect

9,93113 золотых знаков50 серебряных знаков113 бронзовых знаков

1

Improve Article

Save Article

Like Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Like Article

    Given a string, find the minimum and the maximum length words in it. 

    Examples: 

    Input : "This is a test string"
    Output : Minimum length word: a
             Maximum length word: string
    
    Input : "GeeksforGeeks A computer Science portal for Geeks"
    Output : Minimum length word: A
             Maximum length word: GeeksforGeeks

    Method 1: The idea is to keep a starting index si and an ending index ei

    • si points to the starting of a new word and we traverse the string using ei.
    • Whenever a space or ‘’ character is encountered,we compute the length of the current word using (ei – si) and compare it with the minimum and the maximum length so far. 
      • If it is less, update the min_length and the min_start_index( which points to the starting of the minimum length word).
      • If it is greater, update the max_length and the max_start_index( which points to the starting of the maximum length word).
    • Finally, update minWord and maxWord which are output strings that have been sent by reference with the substrings starting at min_start_index and max_start_index of length min_length and max_length respectively.

    Below is the implementation of the above approach:

    C++

    #include<iostream>

    #include<cstring>

    using namespace std;

    void minMaxLengthWords(string input, string &minWord, string &maxWord)

    {

        int len = input.length();

        int si = 0, ei = 0;

        int min_length = len, min_start_index = 0, max_length = 0, max_start_index = 0;

        while (ei <= len)

        {

            if (ei < len && input[ei] != ' ')

                ei++;

            else

            {

                int curr_length = ei - si;

                if (curr_length < min_length)

                {

                    min_length = curr_length;

                    min_start_index = si;

                }

                if (curr_length > max_length)

                {

                    max_length = curr_length;

                    max_start_index = si;

                }

                ei++;

                si = ei;

            }

        }

        minWord = input.substr(min_start_index, min_length);

        maxWord = input.substr(max_start_index, max_length);

    }

    int main()

    {

        string a = "GeeksforGeeks A Computer Science portal for Geeks";

        string minWord, maxWord;

        minMaxLengthWords(a, minWord, maxWord);

        cout << "Minimum length word: "

            << minWord << endl

            << "Maximum length word: "

            << maxWord << endl;

    }

    Java

    import java.io.*;

    class GFG

    {

        static String minWord = "", maxWord = "";

        static void minMaxLengthWords(String input)

        {

              input=input.trim();

            int len = input.length();

            int si = 0, ei = 0;

            int min_length = len, min_start_index = 0,

                  max_length = 0, max_start_index = 0;

            while (ei <= len)

            {

                if (ei < len && input.charAt(ei) != ' ')

                {

                    ei++;

                }

                else

                {

                    int curr_length = ei - si;

                    if (curr_length < min_length)

                    {

                        min_length = curr_length;

                        min_start_index = si;

                    }

                    if (curr_length > max_length)

                    {

                        max_length = curr_length;

                        max_start_index = si;

                    }

                    ei++;

                    si = ei;

                }

            }

            minWord = input.substring(min_start_index, min_start_index + min_length);

            maxWord = input.substring(max_start_index, max_start_index+max_length);

        }

        public static void main(String[] args)

        {

            String a = "GeeksforGeeks A Computer Science portal for Geeks";

            minMaxLengthWords(a);

            System.out.print("Minimum length word: "

                    + minWord

                    + "nMaximum length word: "

                    + maxWord);

        }

    }

    Python 3

    def minMaxLengthWords(inp):

        length = len(inp)

        si = ei = 0

        min_length = length

        min_start_index = max_length = max_start_index = 0

        while ei <= length:

            if (ei < length) and (inp[ei] != " "):

                ei += 1

            else:

                curr_length = ei - si

                if curr_length < min_length:

                    min_length = curr_length

                    min_start_index = si

                if curr_length > max_length:

                    max_length = curr_length

                    max_start_index = si

                ei += 1

                si = ei

        minWord = inp[min_start_index :

                      min_start_index + min_length]

        maxWord = inp[max_start_index : max_length]

        print("Minimum length word: ", minWord)

        print ("Maximum length word: ", maxWord)

    a = "GeeksforGeeks A Computer Science portal for Geeks"

    minMaxLengthWords(a)

    C#

    using System;

    class GFG

    {

        static String minWord = "", maxWord = "";

        static void minMaxLengthWords(String input)

        {

            int len = input.Length;

            int si = 0, ei = 0;

            int min_length = len, min_start_index = 0,

                max_length = 0, max_start_index = 0;

            while (ei <= len)

            {

                if (ei < len && input[ei] != ' ')

                {

                    ei++;

                }

                else

                {

                    int curr_length = ei - si;

                    if (curr_length < min_length)

                    {

                        min_length = curr_length;

                        min_start_index = si;

                    }

                    if (curr_length > max_length)

                    {

                        max_length = curr_length;

                        max_start_index = si;

                    }

                    ei++;

                    si = ei;

                }

            }

            minWord = input.Substring(min_start_index, min_length);

            maxWord = input.Substring(max_start_index, max_length);

        }

        public static void Main(String[] args)

        {

            String a = "GeeksforGeeks A Computer Science portal for Geeks";

            minMaxLengthWords(a);

            Console.Write("Minimum length word: "

                    + minWord

                    + "nMaximum length word: "

                    + maxWord);

        }

    }

    Javascript

    <script>

    let minWord = "";

    let maxWord = "";

    function minMaxLengthWords(input)

    {

        let len = input.length;

        let si = 0, ei = 0;

        let min_length = len;

        let min_start_index = 0;

        let max_length = 0;

        let max_start_index = 0;

        while (ei <= len)

        {

            if (ei < len && input[ei] != ' ')

            {

                ei++;

            }

            else

            {

                let curr_length = ei - si;

                if (curr_length < min_length)

                {

                    min_length = curr_length;

                    min_start_index = si;

                }

                if (curr_length > max_length)

                {

                    max_length = curr_length;

                    max_start_index = si;

                }

                ei++;

                si = ei;

            }

        }

        minWord =

        input.substring(min_start_index,min_start_index + min_length);

        maxWord =

        input.substring(max_start_index, max_length);

    }

    let a = "GeeksforGeeks A Computer Science portal for Geeks";

    minMaxLengthWords(a);

    document.write("Minimum length word: "

            + minWord+"<br>"

            + "Maximum length word:  "

            + maxWord);

    </script>

    Output

    Minimum length word: A
    Maximum length word: GeeksforGeeks

    Time Complexity: O(n), where n is the length of string.
    Auxiliary Space: O(n), where n is the length of string. This is because when string is passed in the function it creates a copy of itself in stack.

    Last Updated :
    12 Dec, 2022

    Like Article

    Save Article

    Canican

    0 / 0 / 0

    Регистрация: 20.06.2016

    Сообщений: 8

    1

    Найти максимальное слово в строке

    20.06.2016, 11:22. Показов 4878. Ответов 2

    Метки нет (Все метки)


    Студворк — интернет-сервис помощи студентам

    Программа правильно определяет длину слов, но почему-то она проверяет только первое слово, но дальше по строке не идет. Причем, если убрать k=0; она проверяет все слова. Надеюсь на вашу помощь и прошу прощения за кривокод.

    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    
    #include <stdio.h> 
    #include <string.h> 
    #include <iostream>
    using namespace std;
    int main() 
    { 
         int i,ii=0,k=0,maxk=0,n,slovo=0; 
         char str[] = " string this is Beautiful";
         printf("%sn",str); 
         n = strlen(str); 
         for(i=0;i<n-1;i++) 
         { 
              if(str[i]!=' ') 
              {  
                   k++; 
              } 
              
              else if(str[i]==' ') 
              { 
                   if(k>maxk)
                   {
                        maxk=k;
                        ii=i;    
                        printf("ii=%i maxk=%in",ii,maxk);
                   }
                   k=0;
              }
         } 
         printf("nMax dlina slova: %inSlovo max dliny: ",maxk);
         for(i=ii-maxk;i<ii;i++)
              printf("%c",str[i]); 
    cin.get();
    return 0; 
    }



    0



    shilko2013

    257 / 234 / 185

    Регистрация: 02.04.2016

    Сообщений: 898

    20.06.2016, 12:04

    2

    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    #include <string>
    #include <iostream>
    using namespace std;
    int main() {
     
        int max = -1, k = 0;
        string s = "string this is Beautiful";
        for (int i = 0; i < s.length(); i++) {
            if ((s[i] == ' ') || (i == s.length()-1)) {
                cout << "Длина = " << k << endl;
                if (k > max)
                    max = k;
                k = 0;
            }
            else k++;
        }
        cout << "Максимальная длина = "<< max;
     
        return 0;
    }



    0



    1Вирт1

    184 / 192 / 48

    Регистрация: 25.08.2011

    Сообщений: 792

    20.06.2016, 12:18

    3

    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    #include <stdio.h> 
    #include <string.h> 
    #include <iostream>
    using namespace std;
    int main()
       {
       size_t max = 0;
       char str[] = " string this is Beautiful";
       char *word = nullptr;
       char *maxWord = nullptr;
       cout << str << endl;
       word = strtok(str, " ,.-!?");
       while (word != nullptr)
          {
          auto tmpLen = strlen(word);
          if (max < tmpLen)
             {
             max = tmpLen;
             maxWord = word;
             }
          word = strtok(nullptr, " ,.-!?");
          }
       cout << "nMax dlina slova: " << max << "nSlovo max dliny: " << maxWord;
       cin.get();
       return 0;
       }

    Добавлено через 6 минут
    shilko2013 если уж писать через string то я бы использовал чего то типа следующего:

    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    vector<string> split(const string &s, char delim) {
        stringstream ss(s);
        string item;
        vector<string> tokens;
        while (getline(ss, item, delim)) {
            tokens.push_back(item);
        }
        return tokens;
    }



    0



    IT_Exp

    Эксперт

    87844 / 49110 / 22898

    Регистрация: 17.06.2006

    Сообщений: 92,604

    20.06.2016, 12:18

    3

    Необходимо:
    Осуществить взаимодействие клиента и сервера на основе протокола UDP.
    Функционирование клиента и сервера реализовать следующим образом:
    клиент посылает набор слов, сервер возвращает слово с максимальным количеством букв.

    Клиент:

    #include <winsock2.h> 
    #include <iostream> 
    #include <stdlib.h> 
     
    #pragma comment(lib,"Ws2_32.lib") 
    using namespace std;
     
    int main() { 
      WORD wVersionRequested; 
      WSADATA wsaData; 
      wVersionRequested = MAKEWORD(2, 2); 
      WSAStartup(wVersionRequested, &wsaData); 
      struct sockaddr_in peer; 
      peer.sin_family = AF_INET; 
      peer.sin_port = htons(1280); // т.к. клиент и сервер на одном компьютере, пишем адрес 127.0.0.1 
      peer.sin_addr.s_addr = inet_addr("127.0.0.1"); 
      SOCKET s = socket(AF_INET, SOCK_DGRAM, 0); 
      int size = sizeof(peer); 
      char buf[255], b[255]; 
      cout << "Please, enter the string." << endl; 
      cin.getline(buf, 100, 'n'); 
      sendto(s, buf, sizeof(buf), 0, (sockaddr *)&peer, size); 
      if (recvfrom(s, b, sizeof(b), 0, (sockaddr *)&peer, &size) != 0) { 
        b[strlen(b)] = ''; //Удаление ненужных символов в конце строки 
        cout << b << endl; 
        cin.get(); 
        } 
      closesocket(s); 
      WSACleanup(); 
      return 0; 
    }

    Сервер:

    #include <winsock2.h> 
    #include <iostream> 
    #include <stdio.h> 
    #include <stdlib.h> 
     
    #pragma comment(lib,"Ws2_32.lib") 
    using namespace std;
     
    int main() { 
      WORD wVersionRequested; // максимальный номер версии WinSock
      WSADATA wsaData; // структура для WSAStartup
      wVersionRequested = MAKEWORD(2, 2); // инициализируем WinSock API
      WSAStartup(wVersionRequested, &wsaData); 
     
      SOCKET s = socket(AF_INET, SOCK_DGRAM, 0); // Создаем серверный сокет
     
      struct sockaddr_in local; // Создаем структуру данных соединения
      local.sin_family = AF_INET; // Поле sin_family всегда имеет значение AF_INET
      local.sin_port = htons(1280);  // Слушаем 1280 порт
      local.sin_addr.s_addr = htonl(INADDR_ANY); // Слушаем все сетевые соединения
      int size = sizeof(local); 
      int c = bind(s, (struct sockaddr*)&local, size); // Связываем сокет с соединением
     
      int r = listen(s, 5); // Инициализируем прослушивание сокета
      cout<<"Server is ready!n"<<endl;
     
      while (true) { // Запускаем бесконечный цикл сервера
        char res[255], b[255]; 
        int length;
        while (recvfrom(s, b, sizeof(b), 0, (sockaddr *)&local, &size) != 0) { 
     
            
       //curlen - текущая длина слов
       //maxlen - максимальная длина слова
       //index - индекс, соответствующий позиции
       //конца самого длинного слова +1
        
    char * str = strtok (b," ");
    //int curlen = 0, maxlen = 0, index = 0, i;
     
    while (str != NULL){
        cout << str << endl;
        str = strtok (NULL," ");}
    /*  
     for(i=0;i < strlen(b);i++)
       {
         if(b[i] == ' '|| b[i]==''){
             if(curlen>maxlen){
               maxlen = curlen;
                 index = i;
             }
             //если конец строки -> выйти из цикла
            if(b[i]=='')break;
             curlen = 0;
          }
          else curlen++;
       }*/
     
    //cout << b << endl << strlen (b);
    //cout << str << endl;
    //cout << maxlen << endl;
     //cout << " " << endl << b;
    }
      // Посылает данные на соединенный сокет 
      sendto(s, b, sizeof(b), 0, (struct sockaddr*)&local, size); 
      } 
     
      closesocket(s); //завершаем работу сокета
      //} 
      WSACleanup(); 
    }

    Я понимаю, что надо сделать, но не могу реализовать. Чтобы вывести слово максимальной длины, необходимо разбить строку на слова, а потом определять длину.
    Часть кода, которая в комментариях начиная с цикла «for» определяет длину самого длинного слова, а часть когда перед этим, как раз разделяет строку и выводит отдельно слова.
    Но всё вместе я не могу это совместить.

    С помощью разрабатываемого алгоритма мы узнаем в JavaScript длину строки и каждого слова. Затем мы сравним подсчеты, и определим, в каком слове содержится больше всего символов:

    Это можно реализовать несколькими способами. Прежде всего, при помощи цикла FOR, методов sort() и reduce().

    • Алгоритмическая задача
    • Предложенные тест-кейсы
      • Находим самое длинное слово при помощи цикла FOR
      • Находим самое длинное слово с помощью метода sort()
      • Находим самое длинное слово с помощью метода reduce()

    Вернуть длину самого длинного слова в предложении. Ответ должен быть выражен в числах:

    function findLongestWord(str) {
      return str.length;
    }
    findLongestWord("The quick brown fox jumped over the lazy dog");
    • findLongestWord(“The quick brown fox jumped over the lazy dog”) должна вернуть число;
    • findLongestWord(“The quick brown fox jumped over the lazy dog”) должна вернуть число 6;
    • findLongestWord(“May the force be with you”) должна вернуть число 5;
    • findLongestWord(“Google do a barrel roll”) должна вернуть число 6;
    • findLongestWord(“What is the average airspeed velocity of an unladen swallow”) должна вернуть число 8;
    • findLongestWord(“What if we try a super-long word such as otorhinolaryngology”) должна вернуть число 19.

    Чтобы узнать длину строки JavaScript, мы воспользуемся методом String.prototype.split().

    Метод split() разбивает объект String на массив строк, разделяя строки на подстроки.

    Между скобками в методе split() нужно будет добавить пробел,

    var strSplit = “The quick brown fox jumped over the lazy dog”.split(‘ ‘);

    что позволит получить массив из раздельных слов:

    var strSplit = [“The”, “quick”, “brown”, “fox”, “jumped”, “over”, “the”, “lazy”, “dog”];

    если не добавить пробел в скобках, то получится следующий результат:

    var strSplit = 
    [“T”, “h”, “e”, “ “, “q”, “u”, “i”, “c”, “k”, “ “, “b”, “r”, “o”, “w”, “n”, “ “, “f”, “o”, “x”, “ “, “j”, “u”, “m”, “p”, “e”, “d”, “ “, “o”, “v”, “e”, “r”, “ “, “t”, “h”, “e”, “ “, “l”, “a”, “z”, “y”, “ “, “d”, “o”, “g”];
    function findLongestWord(str) {
      // Этап 1. Разбиваем строку на массив строк
      var strSplit = str.split(' ');
      // var strSplit = "The quick brown fox jumped over the lazy dog".split(' ');
      // var strSplit = ["The", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"];
    	
      // Этап 2. Инициализируем переменную, которая будет содержать в себе размер самого длинного слова
      var longestWord = 0;
    
      // Этап 3. Создаем цикл FOR
      for(var i = 0; i < strSplit.length; i++){
        if(strSplit[i].length > longestWord){ // If strSplit[i].length больше, чем сравнимое слово...
    	longestWord = strSplit[i].length; // ...затем longestWord принимает новое значение
         }
      }
      /* Здесь strSplit.length = 9
         Для каждой итерации: i = ?   i < strSplit.length?   i++  if(strSplit[i].length > longestWord)?   longestWord = strSplit[i].length
         1 итерация:        0             yes             1   if("The".length > 0)? => if(3 > 0)?     longestWord = 3
         2 итерация:        1             yes             2   if("quick".length > 3)? => if(5 > 3)?   longestWord = 5   
         3 итерация:        2             yes             3   if("brown".length > 5)? => if(5 > 5)?   longestWord = 5   
         4 итерация:        3             yes             4   if("fox".length > 5)? => if(3 > 5)?     longestWord = 5  
         5 итерация:        4             yes             5   if("jumped".length > 5)? => if(6 > 5)?  longestWord = 6 
         6 итерация:        5             yes             6   if("over".length > 6)? => if(4 > 6)?    longestWord = 6 
         7 итерация:        6             yes             7   if("the".length > 6)? => if(3 > 6)?     longestWord = 6
         8 итерация:        7             yes             8   if("lazy".length > 6)? => if(4 > 6)?    longestWord = 6 
         9 итерация:        8             yes             9   if("dog".length > 6)? => if(3 > 6)?     longestWord = 6 
         10 итерация:       9             no               
         Конец цикла FOR */
    
      //Этап 4. Возвращаем самое длинное слово
      return longestWord; // 6
    }
    
    findLongestWord("The quick brown fox jumped over the lazy dog");

    Без комментариев использование JavaScript длина строки length выглядит так:

    function findLongestWord(str) {
      var strSplit = str.split(' ');
      var longestWord = 0;
      for(var i = 0; i < strSplit.length; i++){
        if(strSplit[i].length > longestWord){
    	longestWord = strSplit[i].length;
         }
      }
      return longestWord;
    }
    findLongestWord("The quick brown fox jumped over the lazy dog");

    Мы воспользуемся методом Array.prototype.sort(), который позволяет сортировать массив по определенному критерию, а затем возвращает длину первого элемента в данном массиве.

    Метод sort() сортирует элементы массива и возвращает массив.

    Если мы просто отсортируем массив:

    var sortArray = [“The”, “quick”, “brown”, “fox”, “jumped”, “over”, “the”, “lazy”, “dog”].sort();

    то получим следующий результат:

    var sortArray = [“The”, “brown”, “dog”, “fox”, “jumped”, “lazy”, “over”, “quick”, “the”];

    Перед тем, как узнать длину строки в JavaScript, мы сортируем элементы по определенному критерию,

    [].sort(function(firstElement, secondElement) { 
        return secondElement.length — firstElement.length; 
    })

    в котором длина второго элемента сравнивается с длиной первого:

    function findLongestWord(str) {
      // Этап 1. Разбиваем строку на массив строк
      var strSplit = str.split(' ');
      // var strSplit = "The quick brown fox jumped over the lazy dog".split(' ');
      // var strSplit = ["The", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"];
    
      // Этап 2. Сортируем элементы в массиве
      var longestWord = strSplit.sort(function(a, b) { 
        return b.length - a.length;
      });
      /* Процесс сортировки
        a           b            b.length     a.length     var longestWord
      "The"      "quick"            5            3         ["quick", "The"]
      "quick"    "brown"            5            5         ["quick", "brown", "The"]  
      "brown"    "fox"              3            5         ["quick", "brown", "The", "fox"]
      "fox"      "jumped"           6            3         ["jumped", quick", "brown", "The", "fox"]
      "jumped"   "over"             4            6         ["jumped", quick", "brown", "over", "The", "fox"]
      "over"     "the"              3            4         ["jumped", quick", "brown", "over", "The", "fox", "the"]
      "the"      "lazy"             4            3         ["jumped", quick", "brown", "over", "lazy", "The", "fox", "the"]
      "lazy"     "dog"              3            4         ["jumped", quick", "brown", "over", "lazy", "The", "fox", "the", "dog"]
      */
    
      // Этап 3. Возвращаем длину первого элемента в массиве 
      return longestWord[0].length; // var longestWord = ["jumped", "quick", "brown", "over", "lazy", "The", "fox", "the", "dog"];
                                    // longestWord[0]="jumped" => jumped".length => 6
    }
    
    findLongestWord("The quick brown fox jumped over the lazy dog");

    Код, с помощью которого мы узнаем длину строки JavaScript, без комментариев выглядит так:

    function findLongestWord(str) {
      var longestWord = str.split(' ').sort(function(a, b) { return b.length - a.length; });
      return longestWord[0].length;
    }
    findLongestWord("The quick brown fox jumped over the lazy dog");

    reduce() применяет функцию к каждому значению в массиве (слева направо), чтобы сократить его до единственного значения. Метод исполняет callback-функцию лишь один раз для каждого элемента в массиве.

    Вы можете представить исходное значение в качестве второго аргумента для метода reduce. Здесь мы добавляем пустую строку “”.

    [].reduce(function(previousValue, currentValue) {...}, “”);
    function findLongestWord(str) {
      // Этап 1. Разбиваем строку на массив строк
      var strSplit = str.split(' ');
      // var strSplit = "The quick brown fox jumped over the lazy dog".split(' ');
      // var strSplit = ["The", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"];
    
      // Этап 2. Применяем метод reduce 
      var longestWord = strSplit.reduce(function(longest, currentWord) {
        if(currentWord.length > longest.length)
           return currentWord;
        Else
           return longest;
      }, "");
    
      /* Процесс уменьшения
      currentWord      longest       currentWord.length     longest.length    if(currentWord.length > longest.length)?   var longestWord
      "The"             ""                  3                     0                              yes                          "The"
      "quick"           "The"               5                     3                              yes                         "quick"
      "brown"           "quick"             5                     5                              no                          "quick"
      "fox"             "quick"             3                     5                              no                          "quick"
      "jumped"          "quick"             6                     5                              yes                         "jumped"
      "over"            "jumped"            4                     6                              no                          "jumped"
      "the"             "jumped"            3                     6                              no                          "jumped"
      "lazy"            "jumped"            4                     6                              no                          "jumped"
      "dog"             "jumped"            3                     6                              no                          "jumped"
      */
    
      // Этап 3. Возвращаем длину longestWord
      return longestWord.length; // var longestWord = "jumped" 
                                 // longestWord.length => "jumped".length => 6
    }
    
    findLongestWord("The quick brown fox jumped over the lazy dog");

    Без комментариев:

    function findLongestWord(str) {
      var longestWord = str.split(' ').reduce(function(longest, currentWord) {
        return currentWord.length > longest.length ? currentWord : longest;
      }, "");
      return longestWord.length;
    }
    findLongestWord("The quick brown fox jumped over the lazy dog");

    Понравилась статья? Поделить с друзьями:
  • Найти как назвать попугая
  • Как найти спонсоров для бизнеса в казахстане
  • Как найти место для щенка
  • Как исправить куда нажать
  • Как найти закрытые ссылки на сайте