Grade 10 · Character stringsCitește în română

The longest word

Original: Cel mai lung cuvânt

O(n)C++1737 lines2 examples

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)

Examples

Example 1

Input

Programarea in C++ este distractiva

Expected output

Programarea 11
Example 2

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.

cel-mai-lung-cuvant.cpp
/*
 * 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.