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.
- Rejestracja:około 11 lat
- Ostatnio:około 6 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

- 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' ;]

- Rejestracja:ponad 11 lat
- Ostatnio:ponad 4 lata
- Postów:2442
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;
}
rafcio98
Dzięki wielkie mistrzu! :D
- Rejestracja:prawie 10 lat
- Ostatnio:prawie 10 lat
- Postów:3
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;
}
edytowany 2x, ostatnio: observer_

- Rejestracja:prawie 10 lat
- Ostatnio:ponad 6 lat
- Postów:60
0
Tylko, że to może być czasochłonne i nie wiadomo czy SPOJ to łyknie.

- Rejestracja:ponad 11 lat
- Ostatnio:ponad 4 lata
- Postów:2442
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;
}

- Rejestracja:prawie 14 lat
- Ostatnio:27 dni
- Postów:78
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;
}

Nosz kurcze, prędkość pisania na telefonie :(

: ))

- Rejestracja:prawie 12 lat
- Ostatnio:8 dni
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;
}
edytowany 1x, ostatnio: spartanPAGE

od czegoś ten trzeci parametr jest, a nie żeby zawsze odruchowo dawać zero ;-)
cout << accumulate(begin(foo), end(foo), -'0'*foo.size());

Święta racja!