cijfers optellen, karakters negeren

Status
Niet open voor verdere reacties.

rptje

Gebruiker
Lid geworden
6 dec 2007
Berichten
19
Hallo,

Ik heb een c++ opdracht gevonden waarin wordt gevraagd dat alle ingevoerde cijfers worden opgeteld, maar indien er een ander karakter dan een cijfer wordt ingevoerd moet dit genegeerd worden.

bv: als ik "13+4b2v1" invoer moet hij gewoon de som van de cijfers geven (=11).

Hoe zorg ik ervoor dat hij de waarden anders dan een cijfer negeert ?

Alvast bedankt.
 
Invoer inlezen in een string. Daarna met een lus over de string heenlopen, waarbij je voor elk teken controleert of het groter of gelijk is aan '0' en kleiner of gelijk aan '9' (het gaat hier om chars, dus je moet de enkele aanhalingstekens gebruiken). Als dat zo is trek je er '0' (wederom met aanhalingstekens) vanaf, om de ASCII waarde van het getal om te zetten in de "gewone" waarde van het getal. Dit tel je op bij een int variabele die je buiten de lus declareert.
 
helaas mogen we geen gebruik maken van een string, ook de functie isdigit mag niet gebruikt worden...
 
Dit heb ik momenteel:

Code:
#include <iostream>
#include <conio.h>

using namespace std; 
 
int main() 
{

	char G;
	int teller=1,getal=0;
teller==1;
while(teller=1)
{

		cout<<"Voer een reeks karakters in in: "<<endl;
			cin>>G;
	if ((G>='0') && (G<='9'))
	{
	G=G-'0';
	}


	G=getal+G;
	cout<<" de som is "<< G <<endl;
}

_getch();

}

Kan iemand me hiermee verder helpen ?
 
Een paar opmerkingen:
Code:
teller==1;
Hier vergelijk je teller met 1. Teller heb je net daarvoor op 1 gezet, dus dit levert altijd waar op. Alleen doe je er niks mee. Mag dus weg.
Code:
while(teller=1)
Dit levert een oneindige lus op, omdat je hier teller op 1 zet en dat vervolgens als waarheidswaarde gebruikt. Waarschijnlijk bedoel je hier while(teller==1), alleen verander je teller niet in de lus, dus levert ook dat een oneindige lus op.
Code:
cout<<"Voer een reeks karakters in in: "<<endl;
			cin>>G;
Je vraagt om een reeks karakters, terwijl 'G' een char is en dus maar een teken kan bevatten.
Code:
G=getal+G;
Hier heb je volgens mij een foutje gemaakt, je bedoelt
Code:
getal = getal + G;
of
Code:
getal += G;
Verder is G een char, terwijl je een int wil optellen, dus zal je G eerst naar een int moeten casten
Code:
getal += (int)G;

Als ik dat verander werkt het programma, alleen loopt het oneindig door en kan je maar een getal per keer invoeren.


Ik zou in plaats van
Code:
char G;
gebruik maken van een C-string (ik neem aan dat dat wel mag, want dat is gewoon een array van chars), dus bijv
Code:
char G[100];
Dan moet je om invoer vragen, dat kan met cin. Al levert dat een buffer overflow op als iemand meer dan 100 tekens invoert. Dit kan je wel voorkomen met getline, maar ik weet niet of je dat wel mag gebruiken.
Daarna moet je met een lus, ik zou een for lus gebruiken, over de invoer lopen
Code:
for (int i=0;i<strlen(c);i++)
(mag strlen wel?)
Binnen die lus controleer je of G tussen de 0 en de 9 ligt zoals je dat nu al doet, trek je er '0' vanaf en tel je het op bij getal zoals je dat nu al doet met inachtneming van mijn opmerkingen hierboven.
 
Laatst bewerkt:
[cpp]
class som_van_cijfers {
friend std::istream& operator>>(std::istream& is, som_van_cijfers& svc) {
char c;
int temp = 0;
do {
is >> c;
if (c >= '0' && c <= '9')
temp += (c - '0');
} while (is.peek() != '\n');
svc.sum = temp;
return is;
}
friend std::ostream& operator<<(std::ostream& os, const som_van_cijfers& svc) {
os << svc.sum;
return os;
}
int sum;
};

int main()
{
som_van_cijfers svc;
std::cout << "Voer een reeks karakters in: ";
std::cin >> svc;
std::cout << "Som van alle cijfers in reeks: " << svc << '\n';
system("PAUSE");
return 0;
}
[/cpp]

(het enige nadeel is dat de gebruikte string in dit voorbeeld nergens opgeslagen wordt)
 
Laatst bewerkt:
Hoewel Cod_NL gelijk heeft, vermoed ik dat dit voorbeeld nog een beetje te hoog gegrepen is voor de de OP. Misschien zoiets:

[cpp]
#include <iostream>

int main(){
int sum = 0;
char in = '0';
do {
in = std::cin.get();
if (in >= '0' && in <= '9')
sum += (in - '0');
}while (in != '\n');
std::cout << "Som van alle karakters: " << sum;
return 0;
}[/cpp]
 
Bedankt voor de hulp alletwee!

Mijn programma werkt nu :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan