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

Walking a string and its length

Original: Parcurgerea unui șir și lungimea lui

O(n)C++1742 lines1 example

The idea

A C-style string is a char array terminated by the null character '\0'. cin.getline(s, 256) reads the whole line, spaces included (cin >> s would stop at the first space). The length can be counted by hand, going up to '\0', or with the function strlen from <cstring>; the two values printed must match. On the second line we print the characters separated by hyphens, so the spaces are visible too.

Original description (Romanian)

Un șir de caractere în stil C este un vector de char terminat cu caracterul nul '\0'. cin.getline(s, 256) citește tot rândul, cu tot cu spații (cin >> s s-ar opri la primul spațiu). Lungimea se poate număra de mână, mergând până la '\0', sau cu funcția strlen din <cstring>; cele două valori afișate trebuie să coincidă. Pe al doilea rând afișăm caracterele separate prin cratimă, ca să se vadă și spațiile.

Complexity
O(L), where L is the length of the string
Grade
Grade 10 (Clasa a X-a)

Examples

Example 1

Input

Ana are mere

Expected output

12 12
A-n-a- -a-r-e- -m-e-r-e

The code

Comments are in Romanian, as in the original collection. Edit freely: you can reset at any time.

parcurgere-si-lungime.cpp
/*
 * Titlu: Parcurgerea unui șir și lungimea lui
 * Clasa: 10
 * Capitol: Șiruri de caractere
 * Descriere: Un șir de caractere în stil C este un vector de char terminat cu
 *            caracterul nul '\0'. cin.getline(s, 256) citește tot rândul, cu tot
 *            cu spații (cin >> s s-ar opri la primul spațiu). Lungimea se poate
 *            număra de mână, mergând până la '\0', sau cu funcția strlen din
 *            <cstring>; cele două valori afișate trebuie să coincidă. Pe al doilea
 *            rând afișăm caracterele separate prin cratimă, ca să se vadă și spațiile.
 * Complexitate: O(L), unde L este lungimea șirului
 *
 * Exemplu
 * Intrare: Ana are mere
 * Ieșire:
 * 12 12
 * A-n-a- -a-r-e- -m-e-r-e
 */
#include <iostream>
#include <cstring>
using namespace std;

int main()
{
    char s[256];
    cin.getline(s, 256);

    int lungime = 0;
    while (s[lungime] != '\0')
        lungime++;
    cout << lungime << ' ' << strlen(s) << '\n';

    for (int i = 0; s[i] != '\0'; i++)
    {
        if (i > 0)
            cout << '-';
        cout << s[i];
    }
    cout << '\n';
    return 0;
}

Runs on a real g++ (C++17, -O2) through Compiler Explorer. Keep runs short; there's a time limit.