Нахождение минимального слова в строке предполагает нахождение его двух характеристик: это указатель на начало слова в строке и длина самого слова.
Для хранения этих характеристик лучше всего создать структуру из двух членов данных и использовать отдельную функцию, которая для любой строки будет находить минимальное слово.
Ниже приведена демонстрационная программа, которая показывает, как это можно сделать
#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
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
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: себе
Следующие статьи помогут вам в решении данной задачи:
Оставить комментарий
Вы должны войти, чтобы оставить комментарий.