» »

[Naloga][C++] polje(znaki,cifre)

[Naloga][C++] polje(znaki,cifre)

cosa nostra ::

Ko podam samo cifre deluje ok.ko podam pa še črke pa mi jih šteje pod cifre ter sešteva (vsota) Mogo bi pretvorit samo nevem kje.lp hvala
int main() 
{
 
 
  string bes;
  short a;
  a=0;
  short j;
  j=0;
  short vsota;
  vsota=0;
  short i;
  i=0;
  
  
  

  
  
  cout<<"Podaj poljubno besedilo"<<endl;
  getline(cin,bes);
   
   do
   {
   if(bes[j]>='0' and bes[j] <='9');
   {
       
      j=j+1;           
      
   }
   vsota=vsota+j;
  
  
   if((bes[i]>='A'and bes[i]<='Z') and (bes[i]>='a'and bes[i]<='z'));
   {
         i=i+1;
   }
   
   
    
   a=a+1;
  }while(bes[j]!='\0');

 
 
  cout<<"V BESEDILU JE "<<a<<"ZNAKOV"<<endl;
  cout<<"V BESEDILU JE "<<j<<"CIFER"<<endl;
  cout<<"VSOTA CIFER JE "<<vsota<<endl;
  cout<<"V BESEDILU JE "<<i<<"CRK"<<endl;
  



  system("pause");// da is ogledam rezultate na zaslonu
  return 0;
}

roba87 ::

Vsoto daj v if stavek.

kuall ::

in spremeni
vsota=vsota+j;
v
vsota=vsota+bes[j]-'0';

ker če si pogledaš http://www.asciitable.com/ boš videl da je '0' v resnici številka 48, '
1' je 49, '2' je 50 itd.

pa spremeni imena spremenljivk za božjo voljo:)
j v stCifer, a v stZnakov, i v stCrk, za boljšo preglednost kode.

Zgodovina sprememb…

  • spremenilo: kuall ()

cosa nostra ::

[st.citat p4006945]in spremeni
vsota=vsota+j;
v
vsota=vsota+bes[j]-'0';
Če naredim tako mi še cifer ne pravilno sešteva. 1+2+3 =-43.
Problem mam tudi da če podam 123ab mi šteje kao 5 cifer in 5 črk.)

GupeM ::

Vse napake:
Podpičja za if stavki: Neglede na to, ali if stavek drži ali ne, tisto kar je za njim se ti bo vedno izvedlo, ker si dodal podpičje takoj za if stavkom.
V if stavkih ne uporabljaj bes[j] in bes[i], ker i in j se povečata samo takrat, kadar pogoj drži. Uporabljaj bes[a], ki se poveča pri vsaki iteraciji.
Glej prejšnji popravek tudi za while(...) del.
vsota=vsota+j; mora biti znotraj prvega if stavka (povečaš jo samo če je cifra).
vsota=vsota+j; ni pravilno zapisana: v tem primeru vsoti prišteješ zaporedno številko cifre.
Drugi if stavek se izvede samo če je črka med A in Z IN HKRATI med a in z. Kar pa ne bo nikoli. Izvesti se mora če je črka med A in Z ALI med a in z.

To pa mislim da je tudi vse

cosa nostra ::

hvala .popravil in zdaj vse deluje..stalno naredim neki napako.:)

roba87 ::

Prilepi rešitev, da preverimo.

cosa nostra ::

Deluje vse :D
int main() 
{
  

  
 
  string bes;
  short a;
  a=0;
  short j;
  j=0;
  short vsota;
  vsota=0;
  short i;
  i=0;
  short n;
  n=0;
  
  
  

  
  
  cout<<"Podaj poljubno besedilo"<<endl;
  getline(cin,bes);
   
   do
   {
   if(bes[a]>='0' and bes[a] <='9')
   {
       
      j=j+1;   
      vsota=vsota+bes[a]-48
      ;  
      
   }
  
  
  
   if((bes[a]>='A'and bes[a]<='Z') or  (bes[a]>='a'and bes[a]<='z'))
   {
         i=i+1;
   }
   
   if(bes[a]>='!'and bes[a]<='/')
  {
      n=n+1;               
  }                   
    
   a=a+1;
  }while(bes[a]!='\0');

 
 
  cout<<"V BESEDILU JE "<<a<<"ZNAKOV"<<endl;
  cout<<"V BESEDILU JE "<<j<<"CIFER"<<endl;
  cout<<"VSOTA CIFER JE "<<vsota<<endl;
  cout<<"V BESEDILU JE "<<i<<"CRK"<<endl;
  cout<<"V BESEDILU JE "<<n<<" drugih znakov"<<endl;
  
  



  system("pause");// da is ogledam rezultate na zaslonu
  return 0;

roba87 ::

Super, da ti deluje, ampak čimprej se poskušaj navadit na neko obliko, ko pišeš kodo. Uporabljaj Visual Studio, če imaš Windows. Izogni se uporabi "and" "or" in jih zamenjaj z "&&" "||". Koda pa naj izgleda približno tako...

#include <iostream>
#include <string>

using namespace std;

int main()
{
	string bes;
    short int a = 0;
    short int j = 0;
    short int vsota = 0;
    short int i = 0;
    short int n = 0;
 
	cout <<"Podaj poljubno besedilo"<< endl;
	getline(cin,bes);
	do
	{
		if (bes[a] >= '0' && bes[a] <='9')
		{
			j = j + 1;  
            vsota = vsota + bes[a] - 48; 
		}
		
		if ((bes[a] >= 'A'&& bes[a] <= 'Z') || (bes[a] >= 'a' && bes[a] <= 'z'))
		{
			i = i + 1;
		}
		
		if (bes[a] >= '!' && bes[a] <= '/')
		{
			n = n + 1;             
		}                  
		a = a + 1;
	} while(bes[a] != '\0');
	
	cout <<"V BESEDILU JE "<< a <<"ZNAKOV"<< endl;
    cout <<"V BESEDILU JE "<< j <<"CIFER"<<endl;
    cout <<"VSOTA CIFER JE "<< vsota << endl;
    cout <<"V BESEDILU JE "<< i <<"CRK"<< endl;
    cout <<"V BESEDILU JE "<< n <<" drugih znakov"<< endl;
 
    system ("pause");// da is ogledam rezultate na zaslonu
    return 0;
}


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Pomoč pri sestavi algoritma

Oddelek: Programiranje
369299 (8130) mihy11
»

c# - pretvorba short[2] v float

Oddelek: Programiranje
273860 (3473) KernelPanic
»

Rabim pomoc!

Oddelek: Programiranje
81095 (904) FrEaKmAn
»

Založbe zahtevale za 75 bilijonov odškodnine od p2p ponudnika LimeWire

Oddelek: Novice / Avtorsko pravo
358014 (6263) MrStein
»

[Java] programiranje "praštevila"

Oddelek: Programiranje
72541 (2419) blaz_

Več podobnih tem