Sumowanie znaków w stringu.

Sumowanie znaków w stringu.
R9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
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.

JK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 107
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.

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
1

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

grzesiek51114
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2442
3

Ja zrobiłem jeszcze tak:

Kopiuj
 
#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

OB
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3
0

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

Kopiuj
#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;
}
Nomysz
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 60
0

@observer_

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

grzesiek51114
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2442
0

Można również i tak :)

Kopiuj
#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

EvilOne
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 78
4
Kopiuj
#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;
}
spartanPAGE
  • Rejestracja: dni
  • Ostatnio: dni
5
Kopiuj
#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;
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.