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

Перейти к содержанию

Самое длинное слово в строке

Просмотров 24.6к. Обновлено 15 октября 2021

Вводится строка слов, разделенных пробелами. Найти самое длинное слово и вывести его на экран. Случай, когда самых длинных слов может быть несколько, не обрабатывать.

Следует ввести счетчик букв в слове. В цикле по символам строки пока очередной символ не пробел, счетчик увеличивается. Как только встречается пробел, следует сравнить значение счетчика со значением, записанным в переменной для хранения размера самого длинного слова. Если слово, которое сейчас было «измерено», длиннее, то записать его длину в эту переменную. Кроме того, надо запомнить индекс начала этого слова. Он определяется вычитанием длины слова из текущего индекса.

После того, как очередное слово было обработано, надо сбросить счетчик букв на 0.

Поскольку последнее слово может не оканчиваться пробелом, то оно будет не учтено. Поэтому после цикла надо проверить текущее значение счетчика букв.

Поскольку нам известны начало самого длинного слова в строке и его длина, то надо вывести на экран часть строки от первой буквы на длину слова. В каждом языке программирования это может быть реализовано по-разному.

Pascal

Вывести самое длинное слово в строке паскаль


var
s: string;
i, id, len, max, count: byte;

begin
readln(s);
len := length(s);
max := 0; // длина самого длинного слова
id := 0; // индекс начала самого длинного слова
count := 0;
for i:=1 to len do
if s[i] <> ' ' then
count := count + 1
else begin
if count > max then begin
max := count;
id := i - count;
end;
count := 0
end;

if count > max then begin // проверка последнего слова
max := count;
id := len - count + 1;
end;

writeln(copy(s,id,max));
end.



one two three four five six seven
three

Язык Си


#include < stdio.h>
#include < string.h>
main() {
char s[100];
int i, id, max, count, len;
gets(s);
len = strlen(s);
max = 0;
id = 0;
count = 0;
for (i=0; i< len; i++)
if (s[i] != ' ') count += 1;
else {
if (count > max) {
max = count;
id = i - count;
}
count = 0;
}

if (count > max) {
max = count;
id = i - count;
}
max += id;
for (i=id; i< max; i++)
putchar(s[i]);
printf("n");
}

Python

найти самое длинное слово в строке python (питон)


# Вариант 1 - классический алгоритм
s = input()
l = len(s)
m = 0
ind = 0
count = 0
for i in range(l):
if s[i] != ' ':
count += 1
else:
if count > m:
m = count
ind = i - count
count = 0

if count > m:
m = count
ind = i - count + 1

print(s[ind:ind+m])

# Вариант 2 - с помощью встроенных функций и методов
s = input()
s = s.split()
print(max(s, key=len))

КуМир


алг самое длиное слово
нач
лит s
цел i,id,len,mx,count
ввод s
len := длин(s)
mx := 0
id := 0
count := 0
нц для i от 1 до len
если s[i] <> " " то
count := count + 1
иначе
если count > mx то
mx := count
id := i - count
все
count := 0
все
кц
если count > mx то
mx := count
id := len - count
все
вывод s[id:id+mx]
кон

Basic-256


input s$
l = length(s$)
m = 0
id = 0
c = 0
for i=1 to l
b$ = mid(s$,i,1)
if b$ <> " " then
c = c + 1
else
if c > m then
m = c
id = i -c
endif
c = 0
endif
next i

if c > m then
m = c
id = i-c
endif

print mid(s$,id,m)

How can I use python to find the longest word from a set of words?
I can find the first word like this:

'a aa aaa aa'[:'a aa aaa aa'.find(' ',1,10)]

'a'

rfind is another subset

'a aa aaa aa'[:'a aa aaa aa'.rfind(' ',1,10)]

'a aa aaa'

asked Jul 28, 2009 at 9:10

Niklas Rosencrantz's user avatar

2

If I understand your question correctly:

>>> s = "a aa aaa aa"
>>> max(s.split(), key=len)
'aaa'

split() splits the string into words (seperated by whitespace); max() finds the largest element using the builtin len() function, i.e. the string length, as the key to find out what “largest” means.

answered Jul 28, 2009 at 9:15

balpha's user avatar

balphabalpha

49.8k18 gold badges109 silver badges131 bronze badges

0

Here is one from the category “How difficult can you make it”, also violating the requirement that there should be no own class involved:

class C(object): pass
o = C()
o.i = 0
ss = 'a aa aaa aa'.split()
([setattr(o,'i',x) for x in range(len(ss)) if len(ss[x]) > len(ss[o.i])], ss[o.i])[1]

The interesting bit is that you use an object member to maintain state while the list is being computed in the comprehension, eventually discarding the list and only using the side-effect.

But please do use one of the max() solutions above 🙂 .

answered Jul 28, 2009 at 9:53

ThomasH's user avatar

ThomasHThomasH

22.1k13 gold badges60 silver badges61 bronze badges

1

I thought it meant more like (code below) which outputs the longest word in the string. In this case it is “sentence” however, simply change return(len(s)) which would output howmany characters are in the longest word which would be 8.

def longest_word(text):
    s = max(text.split(), key = len)
    return(s)

if __name__ == "__main__":
    print(longest_word("This is a sentence with words and such."))

Flair's user avatar

Flair

2,5191 gold badge27 silver badges40 bronze badges

answered Sep 5, 2021 at 0:22

APPrentice's user avatar

Another way to find longest word in string:

a="a aa aaa aa"
b=a.split()
c=sorting(b,key=len)
print(c[-1])    

answered Jan 21, 2017 at 10:44

Rohit's user avatar

RohitRohit

194 bronze badges

def largest_word(sentence):
    split_sentence = sentence.split(' ')
    largest_word = ''
    for i in range(len(split_sentence)):
        if len(split_sentence[i]) > len(largest_word):
           largest_word = split_sentence[i]
    print(largest_word)


sentence = "Improve your coding skills with python"

largest_word(sentence)

answered Aug 14, 2018 at 18:39

Md Shafiqul Islam's user avatar

Нужно найти самое длинное слово в строке. 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

Raton_Laveur

0 / 0 / 0

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

Сообщений: 16

1

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

20.11.2013, 18:18. Показов 75246. Ответов 13

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


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

В общем, нужно найти в строке самое длинное слово и вывести его, не создавая при этом новых строк. Всё находит, выводит, но после этого почему-то вылетает. Поняла только, что это происходит из-за части, где я уже записываю наверх найденное слово и пытаюсь стереть оставшуюся часть строки.

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
35
36
37
38
39
40
41
42
43
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <string.h>
void main()
{
char *str;
int n=0;//4islo bukv v slove
int maxn=0;//nu da
 clrscr();
 cout<<"stroka: ";
  gets(str);
  cout<<endl;
 
//типа нахожу число букв в самом длинном слове
for(int i=0;i<strlen(str);i++) {
if((str[i]!=' '))
n++;
if((str[i]==' ')||(strlen(str)-i==1)){
if(n>maxn)
maxn=n;
n=0;        }                   }
n=0;
 
for(i=0;i<strlen(str);i++) {
if((str[i]!=' '))
n++;
if((str[i]==' ')||(strlen(str)-i==1)){        //типа нахожу само это слово и записываю его в начало всё той же строки
if(n==maxn){
    int k=i+1-maxn;
    for(int j=0;j<maxn;++j){
    str[j]=str[k];
    k++;            }
    break;
        }
 
n=0;                      }
                }
for(i=maxn;i<strlen(str);i++)       //типа как-то по-дурацки обнуляю оставшуюся часть
str[i]=0;
puts(str);
 getch();
}

ЗЫ: Знаю, что способ нерациональный, дурацкий и всё такое, но при выполнении вроде всё правильно – и вылет=(((



0



rrrFer

Заблокирован

20.11.2013, 18:38

2

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
string str, longword, word;
stringstream sstr;
 
sstr << str;
sstr >> longword;
while (false == sstr.eof()) {
  sstr >> word;
  if (word.length() > longword.length())
    longword = word;
}

“не создавая новых строк” не заметил, щас исправлю )

C++ (Qt)
1
2
3
char *str;
// ...
  gets(str);

Почему оно работает вообще? память под строку не выделяется…

Добавлено через 11 минут
Если править ваш код, а не писать новый, то так как-то:

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
#include <stdio.h>
#include <iostream>
#include <string.h>
 
int main() {
  char *str = new char[255];
  int n=0, maxn=0, pos = 0, len;
  
  strcpy(str, "2134 235 23673 42 423 145 24 234 25");
  len = strlen(str);
 
  for(int i=0;i<len;i++) {
    if(str[i]!=' ')
      n++;
    if((str[i]==' ')||(len-i==1)) {
      if(n>maxn) {
        pos = i - n;
        maxn=n;
      }
      n=0;   
    }
  }                   
  
  for (int i = 0; i < maxn; ++i)
    std::cout << str[i + pos];
  std::cout << std::endl;
 
  delete []str;
}

Та, часть, кода, которая выполняла это: “//типа нахожу само это слово и записываю его в начало всё той же строки” вообще не нужна в задании.



1



Raton_Laveur

0 / 0 / 0

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

Сообщений: 16

21.11.2013, 14:47

 [ТС]

3

Да, неплохо тупанула, спасибо) Насчёт того, почему работает – на Си, по-моему, вообще практически любой бред работает, просто делает это соответственно глупости писавшего код))

Добавлено через 22 минуты
Только что дошло, что по-человечески это всегда делалось через strtok, ржу

Добавлено через 10 минут
Хотя я нагло вру, там же новые строки создаются…
Единственное, что ещё стрёмно: в моём коде оно реагирует на пробелы, т.е. если в строке есть другие знаки препинания, то получается бред, ибо даже если их указать в условии, то всё равно они не учитываются при запоминании позиции…

Добавлено через 42 минуты
Всё решилось весьма топорно, но просто:

C++
1
2
3
4
5
6
7
8
9
for(int i=0;i<strlen(str);i++) {
if((str[i]!=' ')&&(str[i]!=',')&&(str[i]!='.')&&(str[i]!=';')&&(str[i]!=':'))
n++;
if((str[i]==' ')||(strlen(str)-i==1)||(str[i]==',')||(str[i]=='.')||(str[i]==';')||(str[i]==':')){
if(n>maxn){
maxn=n;
pos=i-n;
if(i>n) pos++;}
n=0;        }                   }



0



9 / 9 / 2

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

Сообщений: 89

06.04.2016, 15:47

4

Здесь проги с ошибками, к сожалению. Правильного решения нет.



0



flash_back

20 / 20 / 20

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

Сообщений: 87

16.06.2016, 16:05

5

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
35
36
37
#include <iostream>
#include <cstring>
 
using namespace std;
 
int main()
{
 
    char string[200];
 
    cin.getline(string,200);
 
    char * pch = strtok (string," "),  // получаем первое слово
         * word = 0; // самое длинное слово
 
    int length = strlen(pch);          // определяем длинну первого слова
 
    int maxLen = 0; // самое длинное слово
 
      while (pch != NULL)                         // пока есть слова
      {
          length = strlen(pch);        // определяем длинну слова
 
          if (maxLen < length )        // определяем самое длинное слово
          {
              maxLen = length;
              word = pch;              // сохраняем указатель на текущее слово
          }
 
          pch = strtok (NULL, " "); // получаем следующее слово
      }
 
      cout << word;
 
 
    return 0;
}



0



Qitelery

0 / 0 / 0

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

Сообщений: 58

14.07.2017, 21:30

6

Здравствуйте! На всякий случай задание:
Найдите в данной строке самое длинное слово и выведите его.

Входные данные

Вводится одна строка. Слова в ней отделены одним пробелом.

Выходные данные

Выведите самое длинное слово. Если таких слов несколько, то выводить нужно, которое встречается раньше.

мой код:

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
35
36
37
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main() {
    int k, l;
    string s, p, y;
    p = 0;
    getline(cin, s);
    for (auto c : s){// цикл, чтобы замерить первое слово и забить его в переменную y, определить его длину l
        if (c == ' '){
            l = strlen(p);
            y = p;
            p = 0;
            break;
        }
        p = p + c;
    }
    for (auto c : s){ // цикл шагаем до первого пробела, забивая символы в p, и при пробеле сравниваем счетчик k c l, т.е. длинну текущего слова с последним самым длинным.
        if (c == ' '){
            if (k > l){
                y = p;
                l = k;
                p = 0;
                k = 0;
            }else{
                p = 0;
                k = 0;
            }
        }else{
            p = p + c;
            k++;
        }
    }
    cout << y;
  return 0;
}

Думаю, что логика верна, но мне не хватает возможно синтаксической составляющей. К примеру, правильно ли я оперирую строками, когда набираю по буквам слова до пробела и когда делаю строку пустой. Пожалуйста помогите. Спасибо!



0



Геомеханик

837 / 640 / 940

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

Сообщений: 1,409

15.07.2017, 03:34

7

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 <iostream>
#include <cstring>
 
char* max_word_len(char* s){
    const char delim[] = " tn,.!?";
    char*  p = NULL;
    size_t i, m = 0;
    while(*s){
        i  = strspn(s, delim);
        s += i;
        if(!*s)
            break;
 
        if((i = strcspn(s, delim)) > m){
            m = i;
            p = s;
        }
        s += i;
    }
 
    if(p != NULL)
        *(p + m) = '';
    return p;
}
 
int main(void){
    char s[] = "Apl, Algol, Fortran, Perl.";
 
    char* w = max_word_len(s);
    if(w != NULL)
        std::cout << w << std::endl;
    std::cin.get();
    return 0;
}



1



easybudda

Модератор

Эксперт PythonЭксперт JavaЭксперт CЭксперт С++

11758 / 7258 / 1720

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

Сообщений: 13,271

15.07.2017, 03:38

8

Судя по стилю, нужен адский школьный “код”, который к тому же должен в Borland TurboC++ компилироваться? Тогда вот:

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
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream.h>
#include <ctype.h>
 
int main() {
    const int MAX_STRING_LENGTH = 256;
    char str[MAX_STRING_LENGTH];
    
    while ( cout << "String: " && cin.getline(str, MAX_STRING_LENGTH) && *str ) {
        int inWord = 0;
        int longestWordStart = 0;
        int longestWordLength = 0;
        int currentWordStart;
        int currentWordLength;
        int i;
        
        for ( i = 0; ; ++i ) {
            if ( isspace(str[i]) || ispunct(str[i]) || str[i] == '' ) {
                if ( inWord ) {
                    if ( currentWordLength > longestWordLength ) {
                        longestWordStart = currentWordStart;
                        longestWordLength = currentWordLength;
                    }
                    inWord = 0;
                }
                if ( str[i] == '' )
                    break;
            }
            else {
                if ( ! inWord ) {
                    inWord = 1;
                    currentWordStart = i;
                    currentWordLength = 1;
                }
                else
                    currentWordLength += 1;
            }
        }
        
        cout << "Longest (" << longestWordLength << " characters) word: ";
        for ( i = longestWordStart; i < longestWordStart + longestWordLength; ++i )
            cout << str[i];
        
        cout << endl;
    }
    
    return 0;
}

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



1



0 / 0 / 0

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

Сообщений: 58

18.07.2017, 19:57

9

easybudda, Геомеханик, возможно выполнить данную задачу без применения char?

Код должен компилироваться в C++. Использую ideone.com



0



easybudda

Модератор

Эксперт PythonЭксперт JavaЭксперт CЭксперт С++

11758 / 7258 / 1720

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

Сообщений: 13,271

18.07.2017, 20:17

10

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
#include <sstream>
 
int main() {
    std::string str;
    
    while ( std::cout << "String: " && std::getline(std::cin, str) && ! str.empty() ) {
        std::istringstream ist(str);
        std::string longest;
        
        ist >> longest;
        while ( ist >> str )
            if ( str.length() > longest.length() )
                longest = str;
        
        std::cout << "First longest word: " << longest << std::endl;
    }
    
    return 0;
}

Код

> g++ longest_word.cpp 
> ./a.out 
String: any many money more
First longest word: money



1



Qitelery

0 / 0 / 0

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

Сообщений: 58

21.07.2017, 20:22

11

easybudda, возвращаясь к char, использовать что-то типа

C++
1
2
char s[];
cin >> s[];

можно?

т.е. сделать так, чтобы не задавать изначально максимальные размер массива, потому что мало ли какого размера будет вводимый массив.



0



no swear

192 / 166 / 82

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

Сообщений: 942

21.07.2017, 20:49

12

монжо так:

C++
1
2
char s[255];
cin.getline(s, 255);

Добавлено через 54 секунды
Окончание ввода это нажатие Enter



1



3433 / 2812 / 1249

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

Сообщений: 9,426

21.07.2017, 22:59

13

Цитата
Сообщение от Qitelery
Посмотреть сообщение

т.е. сделать так, чтобы не задавать изначально максимальные размер массива, потому что мало ли какого размера будет вводимый массив.

Для этого и существует std::string.



1



Qitelery

0 / 0 / 0

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

Сообщений: 58

22.07.2017, 18:41

14

В общем ларчик открылся следующим образом))

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
35
36
37
38
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main() {
    int k, l;
    string s, p, y;
    p = ' ';
    getline(cin, s);
    s = s + p;
    for (auto c : s){
        if (c == ' '){
            l = p.size();            
            y = p;
            p = "";            
            break;
        }
        p = p + c;
    }
    for (auto c : s){
        if (c == ' '){
            if (k > l){             
                y = p;                
                l = k;
                p = "";
                k = 0;
            }else{
                p = "";
                k = 0;
            }
        }else{
            p = p + c;
            k++;          
        }
    }
    cout << y;
  return 0;
}



0



С помощью разрабатываемого алгоритма мы узнаем в 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");

Добавить комментарий