Sumowanie znaków w stringu.

0

Witam. Jestem w trakcie robienia pewnego zadania na SPOJ-u. Potrzebuję od Was pomocy, mianowicie nie mam pojęcia jak zsumować znaki w stringu. W sensie mam np. stringa 123 i wynikiem tego powinno być 6. I nie mam pojęcia jak to zrobić. Umiem jedynie zrobić sumując kolejne znaki stringa, gdzie wynik w ascii wychodzi.

0

Nie wiem jak to będzie w cpp, ale w javie tak:
http://ideone.com/H8Va8c
Założyłem że każdy znak będzie reprezentował liczbę.

Możesz też rzutować stringa na int i po prostu dodawać, lub zrobić tak jak ja.

1

To odejmuj od każdego znaku '0' ;]

3

Ja zrobiłem jeszcze tak:

 
#include <iostream>

using namespace std;

int main()
{
	string liczba = "123";
	int wynik = 0;
	for (int i = 0; i < liczba.length(); ++i)
		wynik += liczba[i] - '0';
	cout << wynik << endl;
	return 0;
}

https://ideone.com/TYFmF9

0

Panowie, po co się tak bawić? Od takich rzeczy to strumienie są.

#include <iostream>
#include <sstream>
using namespace std;

int main()
{	
	string liczba = "123";
	int wynik = 0;
	stringstream strum;
	
	for( int i = 0; i < liczba.length(); i++ )
	{
		strum << liczba[i];
		int cyfra;
		strum >> cyfra;
		strum.clear();		
		wynik += cyfra;
	}	
	
	cout << wynik;
}
0

@observer_

Tylko, że to może być czasochłonne i nie wiadomo czy SPOJ to łyknie.

0

Można również i tak :)

#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
	string liczba = "123";
	int wynik = 0;
	for_each(liczba.begin(), liczba.end(), [&](char &znak){ wynik += znak - '0'; });
	cout << wynik << endl;
	return 0;
}

https://ideone.com/hlpSJs

4
#include <iostream>
#include <algorithm>

int main()
{
	std::string num{"123"};
	std::cout << std::accumulate(num.begin(), num.end(), 0u, [](std::size_t a, char b) { return a + (b - '0'); }) << std::endl;
}
5
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

int main() {
	string foo = "1337";
    cout << accumulate(begin(foo), end(foo), -'0'*foo.size());
	return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1