Informatică, întrebare adresată de igugleep8the3, 8 ani în urmă

#3252 Alphanum
Cerința
Scrieți funcția cu antetul:

void Alphanum(char s[], char cuv[][21], int &n, int num[], int &m)
Șirul s conține cuvinte formate din litere mici, numere formate cu cifre, iar cuvintele și numerele sunt separate prin unul sau mai multe spații. Să se memoreze cuvintele în vectorul cuv și numerele în num. Numărul de cuvinte va fi reținut în n, iar numărul de numere în m.

Restricții și precizări
numerele sunt naturale mai mici sau egale cu 2.000.000.000
cuvintele au lungimea cel mult 20
în șirul s va exista cel puțin un cuvânt și cel puțin un număr
Cuvintele și numerele se memorează în ordinea în care apar în s.
indexarea va fi de la 0 în cuv și în num

Exemplu
Dacă s = "sunt 30 de pomi si 100 flori", atunci după apelul Alphanum(s, cuv, n, num, m) vom avea n = 5, m = 2, cuv[0]="sunt", cuv[1]="de", cuv[2]="pomi", cuv[3]="si", cuv[4]="flori", iar vectorul num = (30, 100).
Indicații de rezolvare
Scopul acestei probleme este să se aprofundeze modul în care se extrag cuvinte și numere dintr-un șir de caractere fără a folosi funcții specifice.

Solutia mea este gresita si nu mi dau seama unde gresesc :
void Alphanum(char s[], char cuv[][21], int &n, int num[], int &m)
{ char *p=strtok(s," ");
m=-1,n=-1;
while(p)
{ if(p[0]>='0' && p[0]<='9')
{ m++;
for(int i=0;i num[m]=num[m]*10+(p[i]-'0');
}
if(isalpha(p[0]))
{ n++;
strcpy(cuv[n],p);
}
p=strtok(NULL,s);
}
}

Răspunsuri la întrebare

Răspuns de pmarian98
1

Răspuns:

#include <cctype>

inline void Alphanum (char s[], char cuv[][21], int& n, int num [], int& m)

{

   n = m = 0;

   for (int i = 0; s[i]; )

   {

       if (std::isalpha (s[i]))

       {

           int k = 0;

           while (std::isalpha (s[i]) && s[i])

               cuv[n][k ++] = s[i], ++ i;

           ++ n;

       }

       else if (std::isdigit (s[i]))

       {

           while (std::isdigit (s[i]) && s[i])

               num[m] = num[m] * 10 + (s[i] - '0'), ++ i;

           ++ m;

       }

       else ++ i;

   }

}

Explicație:


igugleep8the3: mersi. dar am o intrebare. acolo unde ai pus std:: cu ce ajuta?
pmarian98: ca sa nu mai scriu using namespace std;
pmarian98: fiecare functie are cate un nume unic
igugleep8the3: okay, am inteles. Mersi mult
pmarian98: isalpha,isdigit apartine numelui std
Alte întrebări interesante