Grade 10 · Character stringsCitește în română
Walking a string and its length
Original: Parcurgerea unui șir și lungimea lui
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)
- Chapter
- Character strings
Examples
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.
/*
* 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.