Grade 10 · Character stringsCitește în română
The longest word
Original: Cel mai lung cuvânt
The idea
We split the sentence into words with strtok and keep the longest word in a separate string, copying it with strcpy (we cannot write celMaiLung = p, because arrays cannot be assigned). On ties the first word found stays. The word and its length are printed.
Original description (Romanian)
Împărțim fraza în cuvinte cu strtok și păstrăm cuvântul cu lungimea cea mai mare într-un șir separat, copiindu-l cu strcpy (nu putem scrie celMaiLung = p, pentru că vectorii nu se atribuie). La egalitate rămâne primul cuvânt găsit. Se afișează cuvântul și lungimea lui.
- Complexity
- O(L)
- Grade
- Grade 10 (Clasa a X-a)
- Chapter
- Character strings
Examples
Input
Programarea in C++ este distractiva
Expected output
Programarea 11
Input
un drum lung, apoi altul
Expected output
altul 5
The code
Comments are in Romanian, as in the original collection. Edit freely: you can reset at any time.
/*
* Titlu: Cel mai lung cuvânt
* Clasa: 10
* Capitol: Șiruri de caractere
* Descriere: Împărțim fraza în cuvinte cu strtok și păstrăm cuvântul cu lungimea
* cea mai mare într-un șir separat, copiindu-l cu strcpy (nu putem scrie
* celMaiLung = p, pentru că vectorii nu se atribuie). La egalitate rămâne
* primul cuvânt găsit. Se afișează cuvântul și lungimea lui.
* Complexitate: O(L)
*
* Exemplu
* Intrare: Programarea in C++ este distractiva
* Ieșire: Programarea 11
*
* Exemplu
* Intrare: un drum lung, apoi altul
* Ieșire: altul 5
*/
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char s[256], celMaiLung[256] = "";
cin.getline(s, 256);
char *p = strtok(s, " ,.!?");
while (p != NULL)
{
if (strlen(p) > strlen(celMaiLung))
strcpy(celMaiLung, p);
p = strtok(NULL, " ,.!?");
}
cout << celMaiLung << ' ' << strlen(celMaiLung) << '\n';
return 0;
}
Runs on a real g++ (C++17, -O2) through Compiler Explorer. Keep runs short; there's a time limit.