• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Odczytanie pliku-suma cyfr.

Object Storage Arubacloud
0 głosów
738 wizyt
pytanie zadane 25 listopada 2018 w C i C++ przez adamus Użytkownik (860 p.)

Moj problem polega na tym ze nie wiem jak zsumowac wsztystkie cyfry z pliku, Liczby sa odzielone spacja np. 3064 4523 itd. Ma ktos jakis pomysł ? 

#include <iostream>
#include <conio.h>
#include <fstream>
#include <cmath>
using namespace std;
int zam(string x)
{
	int y=0,i,j=0;
	for(i=x.size()-1;i>=0;i--,j++)
	{
		y+=(x[i]-'0')*pow(10,j);
	}
	return y;
}
int main()
{
	string a,tekst;
	int i,suma=0,pom,b;
	ifstream plik("liczby.txt");
	if(plik.is_open())
	{
		while(plik.good())
		{
			getline(plik,tekst);
			
			for(i=0;i<tekst.size();i++)
			{
				pom=tekst[i];
				while(pom)
				{
					suma=pom%10;
					pom/=10;
				}
			}
			
		
			
			
			
			
			

		}
		plik.close();
	}

		cout<<suma;
	
	getch();
	return 0;

 

4 odpowiedzi

0 głosów
odpowiedź 25 listopada 2018 przez Potopiec Obywatel (1,550 p.)
Nie ma w c++ getInt? Pobierasz z pliku po linijce a nie po liczbie. Użyj getInt zamiast getline . Nie widzę też żebyś zmieniał string na int . Ale może się mylę (Jestem z javy ale nie mogą aż tak się różnić)
komentarz 25 listopada 2018 przez adamus Użytkownik (860 p.)
string na int zmieniam w funkcji int zam. Tylko nie wiem jak zsumowa te wszytskie cyfry
komentarz 25 listopada 2018 przez Potopiec Obywatel (1,550 p.)
Z tego co widzę to pobierasz znaki ze stringa ale ich nie konwertujesz na inty.
0 głosów
odpowiedź 25 listopada 2018 przez niezalogowany

Na początku podziel tego stringa wczytanego z tekstu na pojedyncze liczby (jeszcze w typie string), tzn. jeśli znak to spacja, wczytaj nową liczbę. Te stringi potem konwertuj na liczby np. funkcją stoi

 

komentarz 25 listopada 2018 przez adamus Użytkownik (860 p.)

Jak to podzielic na pojedyczne liczby, tak ? 

	for(i=0;i<tekst.size();i++)
			{
				if(tekst[i]==' ')
				{
					cout<<tekst[i+1];
					
				}
			}		

 

0 głosów
odpowiedź 25 listopada 2018 przez niezalogowany

Jeżeli w pliku są tylko liczby:

#include <iostream>
#include <fstream>

int main()
{
	std::ifstream plik("liczby.txt");
	if (!plik.is_open())
	{
		std::cerr << "Nie znaleziono pliku!\n";
		return -1;
	}

	unsigned suma = 0;
	unsigned liczba;
	while (plik >> liczba) 
	{
		while (liczba)
		{
			suma += liczba % 10;
			liczba /= 10;

		}
	}

	std::cout << suma;
}

Jeżeli chcesz policzyć wszystkie cyfry włącznie z czymś takim 121dfe1 i takim 123421342134213421354353297852634958724369875968743257698324532 to można zrobić tak:

     std::string liczba;
	while (plik >> liczba) 
	{
		for (auto i = 0u; i < liczba.size(); ++i)
		{
			if (std::isdigit(liczba[i])) // <cctype>
			{
				suma += liczba[i] - '0'; // (x - 48) ==> ASCII
			}
		}
	}
0 głosów
odpowiedź 25 listopada 2018 przez mokrowski Mędrzec (155,460 p.)
Wyzeruj sumę. Wczytuj znak po znaku aż do końca pliku i klasyfikuj znak jako cyfrę z użyciem std::isdigit(...). Dany znak jest cyfrą, odejmij od niego '0' (czyli kod znaku ASCII) a otrzymasz liczbę. Liczbę sumuj do sumy ogólnej.

Tak to będzie wyglądało jeśli literalnie potraktować polecenie które podałeś.

Podobne pytania

0 głosów
1 odpowiedź 723 wizyt
pytanie zadane 24 listopada 2018 w C i C++ przez adamus Użytkownik (860 p.)
0 głosów
1 odpowiedź 3,715 wizyt
pytanie zadane 21 czerwca 2017 w Bezpieczeństwo, hacking przez Pawel19 Nowicjusz (120 p.)
+1 głos
2 odpowiedzi 1,469 wizyt

92,576 zapytań

141,426 odpowiedzi

319,651 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...