Pereiti prie turinio

C++ skaicius is stringo


Rekomenduojami pranešimai

void IeskotiSkaiciu(string e)

{

string sk("0123456789");

string s(" /?.,()"); // skyrikliai

int zpr = 0, zpb = 0; //zpr - zodzio pradzia, zpb - zodzio pabaiga,

string zodis("");

int SK = 0;

zpr = e.find_first_not_of(s, zpb);

while (zpr != -1)

{

zpb = e.find_first_of(s, zpr);

zodis = e.substr(zpr, zpb - zpr);

SK = zodis.find_first_not_of(sk, 0); // jei zodyje nera raidziu, vadinasi jis yra skaicius

if (SK == -1)

{

cout << " Skaicius rastas - " << zodis;

}

zpr = e.find_first_not_of(s, zpb);

}

}

 

Manau, esme supratai ;)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

void IeskotiSkaiciu(string e)

{

string sk("0123456789");

string s(" /?.,()"); // skyrikliai

int zpr = 0, zpb = 0; //zpr - zodzio pradzia, zpb - zodzio pabaiga,

string zodis("");

int SK = 0;

zpr = e.find_first_not_of(s, zpb);

while (zpr != -1)

{

zpb = e.find_first_of(s, zpr);

zodis = e.substr(zpr, zpb - zpr);

SK = zodis.find_first_not_of(sk, 0); // jei zodyje nera raidziu, vadinasi jis yra skaicius

if (SK == -1)

{

cout << " Skaicius rastas - " << zodis;

}

zpr = e.find_first_not_of(s, zpb);

}

}

 

Manau, esme supratai ;)

Labai dekui ;) kiek permeciau akimis tai Jus cia po viena zodi sakidotes visaeilute?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Sveikas, dar ir aš pateiksiu galimą ir trumpą variantą.

 

bool is_numeric(string eil)
{
   bool numeric = true;

   for (unsigned i = 0; i < eil.length(); ++i)
   {
       if ((int)eil[i] > 57 || (int)eil[i] < 48)
       {
           numeric = false;
           break;
       }
   }

   return numeric;
}

int main()
{
   ifstream ifs("ts.txt");

   string x;

   while (ifs >> x)
   {
       if (is_numeric(x))
       {
           cout << x << endl;
       }
   }

   ifs.close();

   return 0;
}

Redagavo g3dut1s
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Dekui, bet tavo algoritmo as tikrai nesupratau :). Bijau kad kol kas per sudetingas jis man.

 

Sudėtinga taip nėra:

 

Čia skaito žodžius atskirai iki tarpo kol nepasiekė failo pabaigos:

while (ifs >> x)

 

Perduoda nuskaitytą žodį į funkciją:

if (is_numeric(x))

 

Funkcijoje:

bool is_numeric(string eil)
{
   // Galvojam, kad nurodytas žodis "eil" yra skaičius.
   bool numeric = true;

   // Vykdo ciklą iki žodžio pabaigos
   for (unsigned i = 0; i < eil.length(); ++i)
   {
       // eil[i] - žodžio raidė.
       // (int)eil[i] - skaičius, arba žodžio raidės atitikmuo ASCII lentelėje.

       // Skaičiai nuo 0 iki 9, ASCII lentelėje patenka į intervalą nuo
       // 48 iki 57 imtinai.

       // Tikrina, ar žodžio raidės atitikmuo lentelėje patenka į skaičių
       // intervalą.
       if ((int)eil[i] > 57 || (int)eil[i] < 48)
       {
           // Surado simbolį, kuris nėra skaičius, todėl nutraukia ciklą ir grąžina
           // false, nes tai nėra skaičius.
           numeric = false;
           break;
       }
   }

   return numeric;
}

 

Įvykdęs šį kodą pamatysi, kokie simboliai atitinka tam tikrus skaičius ASCII lentelėje:

for (unsigned i = 0; i < 128; ++i)
{
   cout << i << " " << (char) i << endl;
}

 

Nežinau gal bus aiškiau.

Redagavo g3dut1s
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...