Нужно найти самое длинное слово в строке. 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 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
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
perfectperfect
9,93113 золотых знаков50 серебряных знаков113 бронзовых знаков
1
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
Canican 0 / 0 / 0 Регистрация: 20.06.2016 Сообщений: 8 |
||||
1 |
||||
Найти максимальное слово в строке20.06.2016, 11:22. Показов 4878. Ответов 2 Метки нет (Все метки)
Программа правильно определяет длину слов, но почему-то она проверяет только первое слово, но дальше по строке не идет. Причем, если убрать k=0; она проверяет все слова. Надеюсь на вашу помощь и прошу прощения за кривокод.
0 |
shilko2013 257 / 234 / 185 Регистрация: 02.04.2016 Сообщений: 898 |
||||
20.06.2016, 12:04 |
2 |
|||
0 |
1Вирт1 184 / 192 / 48 Регистрация: 25.08.2011 Сообщений: 792 |
||||||||
20.06.2016, 12:18 |
3 |
|||||||
Добавлено через 6 минут
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");