Clasa a X-a · Șiruri de caractereRead in English
Extragerea numerelor dintr-un text în C++
În engleză: Extracting the numbers from a text
Ideea
Parcurgem textul; când întâlnim o cifră, construim numărul ca la clasa a IX-a (nr = nr * 10 + (s[i] - '0')) cât timp urmează cifre. Expresia s[i] - '0' transformă caracterul cifră în valoarea lui ('7' - '0' = 7). Afișăm numerele găsite pe primul rând și suma lor pe al doilea.
Descrierea în engleză
We walk the text; when we meet a digit, we build the number as in grade 9 (nr = nr * 10 + (s[i] - '0')) while digits follow. The expression s[i] - '0' turns the digit character into its value ('7' - '0' = 7). The numbers found are printed on the first line and their sum on the second.
- Complexitate
- O(L)
- Clasa
- Clasa a X-a (Grade 10)
- Capitol
- Șiruri de caractere
Exemple
Intrare
Am 3 mere, 12 pere si 105 prune.
Ieșire așteptată
3 12 105 120
Intrare
cod2026abc7
Ieșire așteptată
2026 7 2033
Codul C++
Codul complet, cu comentarii în română. Îl poți modifica liber și îl poți reseta oricând.
/*
* Titlu: Extragerea numerelor dintr-un text
* Clasa: 10
* Capitol: Șiruri de caractere
* Descriere: Parcurgem textul; când întâlnim o cifră, construim numărul ca la
* clasa a IX-a (nr = nr * 10 + (s[i] - '0')) cât timp urmează cifre.
* Expresia s[i] - '0' transformă caracterul cifră în valoarea lui
* ('7' - '0' = 7). Afișăm numerele găsite pe primul rând și suma lor pe
* al doilea.
* Complexitate: O(L)
*
* Exemplu
* Intrare: Am 3 mere, 12 pere si 105 prune.
* Ieșire:
* 3 12 105
* 120
*
* Exemplu
* Intrare: cod2026abc7
* Ieșire:
* 2026 7
* 2033
*/
#include <iostream>
using namespace std;
int main()
{
char s[256];
cin.getline(s, 256);
long long suma = 0;
int i = 0;
while (s[i] != '\0')
{
if (s[i] >= '0' && s[i] <= '9')
{
long long nr = 0;
while (s[i] >= '0' && s[i] <= '9')
{
nr = nr * 10 + (s[i] - '0');
i++;
}
cout << nr << ' ';
suma += nr;
}
else
i++;
}
cout << '\n' << suma << '\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.