Clasa a X-a · Șiruri de caractereRead in English

Parcurgerea unui șir și lungimea lui în C++

În engleză: Walking a string and its length

O(n)C++1742 de linii1 exemplu

Ideea

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.

Descrierea în engleză

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.

Complexitate
O(L), unde L este lungimea șirului
Clasa
Clasa a X-a (Grade 10)

Exemple

Exemplul 1

Intrare

Ana are mere

Ieșire așteptată

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

Codul C++

Codul complet, cu comentarii în română. Îl poți modifica liber și îl poți reseta oricând.

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;
}

Rulează pe un g++ adevărat (C++17, -O2) prin Compiler Explorer. Programele trebuie să se termine repede: există o limită de timp.