Wpis z mikrobloga

@Grzesiek4: Spróbuj może ściągnąć Visual Studio Express (jest za darmo).

Przy okazji przypuszczam, że wiem o co chodzi z tym -35: ten plik pary.txt ma windowsowe zakończenia linii (

\r\n
), a ja mam system nie-windowsowy gdzie jest tylko

\n
. Stąd program próbuje traktować

\r
jako cyfrę.
@ghostface: Na maturze będzie Code::Blocks... Mogłem jeszcze wybrać Dev C++, ale to co wybrałem to wiem że było najlepsze z możliwych :P

@almafater: Raz u mnie w szkole byli studenci z politechniki Białostockiej i rozdawali klucze do "StudentLive" i "DreamSpark". Ważne rok, ale nie wiem czy od użycia czy od wygenerowania. Do tej pory nie używałem tego
@Grzesiek4: Potwornie przekombinowany ten kod, po co bawisz się w czytanie znak po znaku i ręczne parsowanie? Nie lepiej czytać do

std::string
operatorem

>>
?

Anyway, można dużo krócej:

#include <fstream>

#include <string>

#include <iterator>

#include <algorithm>

int convert(std::string s) {

int res = 0, pow = 1;

try {

std::for_each(s.rbegin(), s.rend(), [&](char c) {

int num = c - '0';

if (num < 0 || num >= 3)

throw "error";
@Grzesiek4: Ech, czyli masz starą wersję kompilatora, jeszcze nie wspiera features z C++11. Funkcję

convert()
musisz zmienić na taką:

int convert(std::string s) {

int res = 0, pow = 1;

std::string::constreverseiterator i = s.rbegin();

while (i != s.rend()) {

int num = *i++ - '0';

if (num < 0 || num >= 3)

return -1;

res += num * pow;

pow *= 3;

}

return res;

}

Wstawiłbym na
@Grzesiek4: Tak naprawdę ważna jest tylko funkcja

convert
– pobiera liczbę zapisaną trójkowo jako

string
i zwraca przekonwertowaną na

int
lub -1 gdy wejście jest nieprawidłowe (np. wystąpi cyfra 5).

Możesz w pętli wczytywać do stringa kolejne liczby trójkowe przez file >> str; Nie musisz wtedy przejmować się spacjami i końcami linii, STLowe IO samo to za Ciebie załatwi. W kolejnych wczytaniach (operatorem >>) będziesz miał pobrane całe ciągi znaków jako