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

Нахождение минимального слова в строке предполагает нахождение его двух характеристик: это указатель на начало слова в строке и длина самого слова.

Для хранения этих характеристик лучше всего создать структуру из двух членов данных и использовать отдельную функцию, которая для любой строки будет находить минимальное слово.

Ниже приведена демонстрационная программа, которая показывает, как это можно сделать

#include <stdio.h>
#include <ctype.h>

struct Position
{
    char *p;
    size_t n;
};

Position min_word(const char *s)
{
    Position min = { NULL, 0 };

    while (*s)
    {
        while (isblank((unsigned char)*s)) ++s;

        if (*s)
        {
            Position current = { ( char * )s, 0 };

            while (*s && !isblank((unsigned char)*s))
            {
                ++current.n;
                ++s;
            }

            if (min.p == NULL || current.n < min.n) min = current;
        }
    }

    return min;
}

int main(void)
{
    char s[] = "Hello hi chiao";

    Position min = min_word(s);
    printf("The minimum word in the string is %*.*s with length of %zun", 
            min.n, min.n, min.p, min.n);

    return 0;
}

Вывод программы на консоль

The minimum word in the string is hi with length of 2

Обратите внимание, что для нахождения минимального слова в строке не требуется использовать строчные функции, как, например, strlen, так как это просто пустая трата времени.

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

    «Python Последнее обновление 25 июля 2019 06:36:30 (UTC / GMT +8 часов)

    script1adsense2code

    script1adsense3code

    Строка Python: упражнение 79 с решением

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

    Пример решения : –

    Код Python:

    def smallest_largest_words(str1):
        word = "";
        all_words = [];
        str1 = str1 + " ";
        for i in range(0, len(str1)):
            if(str1[i] !=' '):
                word = word + str1[i];  
            else:
                all_words.append(word);  
                word = "";  
              
        small = large = all_words[0];  
       
    #Find smallest and largest word in the str1  
        for k in range(0, len(all_words)):
            if(len(small) > len(all_words[k])):
                small = all_words[k];
            if(len(large) < len(all_words[k])):
                large = all_words[k];
        return small,large;
    str1 ="Write a Java program to sort an array of given integers using Quick sort Algorithm.";  
    print("Original Strings:n",str1)
    small, large = smallest_largest_words(str1)  
    print("Smallest word: " + small);  
    print("Largest word: " + large); 
    
    

    Пример вывода:

     Оригинальные строки:
     Напишите программу на Java для сортировки массива заданных целых чисел с использованием алгоритма быстрой сортировки.
    Наименьшее слово:
    Самое большое слово: алгоритм.
    

    Блоксхема:

    «Блок-схема:

    Визуализируйте выполнение кода Python:

    Следующий инструмент визуализирует, что компьютер делает шаг за шагом при выполнении указанной программы:

    Редактор кода Python:

    Есть другой способ решить это решение? Внесите свой код (и комментарии) через Disqus.

    Предыдущий: Напишите программу на Python для подсчета символов в той же позиции в данной строке (строчные и прописные буквы), что и в английском алфавите.
    Далее: написать программу на Python для подсчета количества подстрок с одинаковыми первым и последним символами данной строки.

    Каков уровень сложности этого упражнения?

    Новый контент: Composer: менеджер зависимостей для PHP , R программирования


    script1adsense5code

    disqus2code

    script1adsense6code

    script1adsense7code

    script1adsense8code

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

    Скалабан Евгений



    Знаток

    (460),
    закрыт



    10 лет назад

    ra

    Высший разум

    (113218)


    10 лет назад

    #include <string>
    #include <sstream>
    #include <iostream>

    using namespace std;

    int main() {
        string s, w, mw;
        cout << “string? “;
        getline(cin, s);
        istringstream ss(s);
        ss >> mw;
        while (ss >> w) if ( mw.size() > w.size() ) mw = w;
        cout << “shortest word: ” << mw << endl;
        return 0;
    }

    Rock Lobster

    Мыслитель

    (6870)


    10 лет назад

    Алгоритм. Как только ты имеешь символ не равный пробелу – начинай подсчет. Как только дойдешь до следующего пробела, переводи счетчик в переменную min и обнуляй счетчик. Дальше находишь таким же образом второе слово и сравниваешь значение счетчика с значением переменной min. Если счетчик больше, то обнуляешь его. Если меньше, то присваиваешь min и обнуляешь. И так до конца.

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

    Самое короткое слово в строке

    Уровень сложности:






    • Задание
    • Решение

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

    Для решения задачи прочитайте статью — Строки в С++. Определить символ пробела в строке можно с помощью функции isspace. Чтобы определить длину слова, воспользуйтесь функцией strlen. пример вывода программы:

    Автор программы — Сергей Киях. Задача решена с использованием класса string, собственно поэтому кода получилось так мало.

    #include <iostream>
    #include <sstream>
    #include <string>
    
    int main()
    {
        std::string s;
    
        std::cout << "Enter string: ";
        std::getline(std::cin, s);
    
        std::stringstream ss(s);
        std::string word(s);
    
        while (ss >> s)
              if (s.size() < word.size())
               word = s;
    
        std::cout << "Res: " << word << std::endl;
    
        return 0;
    }

    Результат  работы программы, показан ниже:

    CppStudio.com

    Enter string: Прокладывай себе дорогу силой.
    Res: себе

    Следующие статьи помогут вам в решении данной задачи:

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

    Вы должны войти, чтобы оставить комментарий.

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