Sumowanie znaków w stringu.

Sumowanie znaków w stringu.
R9
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 9 lat
  • 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:około 11 lat
  • Ostatnio:około 7 godzin
  • 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.

edytowany 1x, ostatnio: Jan Ko
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

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


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
grzesiek51114
grzesiek51114
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 4 lata
  • 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

R9
Dzięki wielkie mistrzu! :D
OB
  • Rejestracja:prawie 10 lat
  • Ostatnio:prawie 10 lat
  • 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;
}
edytowany 2x, ostatnio: observer_
twonek
jak dla mnie jedna linijka kodu która działa szybciej jest fajniejsza niż 5 linijek, które są wolniejsze ;)
kaczus
a strzelając z armaty mozna ponoc muchę ubić....
Nomysz
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 6 lat
  • Postów:60
0

@observer_

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

grzesiek51114
grzesiek51114
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 4 lata
  • 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:około 14 lat
  • Ostatnio:około 2 miesiące
  • 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
Nosz kurcze, prędkość pisania na telefonie :(
spartanPAGE
  • Rejestracja:prawie 12 lat
  • Ostatnio:30 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;
}
edytowany 1x, ostatnio: spartanPAGE
Azarien
od czegoś ten trzeci parametr jest, a nie żeby zawsze odruchowo dawać zero ;-) cout &lt;&lt; accumulate(begin(foo), end(foo), -'0'*foo.size());

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.