Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Program zamieniajacy string na int

Ostatnio zmodyfikowano 2014-02-19 07:11
Autor Wiadomość
kynol
Temat założony przez niniejszego użytkownika
Program zamieniajacy string na int
» 2014-02-18 18:50:55
Witam, mam do napisania program ktory bedzie zamienial string zapisany w dane.txt na liczby typu int, wiem ze mozna uzyc roznych funkcji typu atoi itd ale ta funkcja ma byc napisana przeze mnie.. I tutaj mam problem. Doszedlem do w niosku ze mozna cos takiego napisac tym sposobrm ze jesli w pliku dane.txt zapisze liczbe 123 to w programie mozna zrobic cos takiego, utworzyc tablice znakow od 0-9 i po prostu zeby porownywal pierwsza liczbe w moim przykladzie liczby 123 bylaby to liczba 1, zostalaby ona dodana do tablicy i pozniej znow by sprawdzal kolejna, dodalby 2 do tablicy, a pozniej znow dodalby 3 do tablicy, tylko jak zrobic zeby po prostu te liczby zapisane w tablicy tworzyly cala liczbe 123, tak zeby mozna bylo na tej liczbie wykonywac rozne operacje? Jak cos nie jest jasne, to wytlumacze po raz kolejny. Prosze o jakies rady :)
P-104892
Winner_Of_Death
» 2014-02-18 20:34:45
Chodzi ci po prostu o wczytanie samych liczb z pliku, bez innych znaków?
P-104924
alixir
» 2014-02-18 20:37:50
Wszystko da się zrobić. Tu masz mały przykład jak można ze stringa wyciągnąć liczby i zapisać w tablicy int.
Starałem się nie używać żadnej z gotowych funkcji.
Oczywiście ta funkcja też ma swoje wady (które da się wyeliminować), ale to tylko przykład aby zobrazować sytuację.

C/C++
#include <iostream>
#include <string>

int potega( const int, const int );
int string2int( const std::string &, int * );

int main() {
   
    std::string tekst = "42 1 354 24 127 126 854 12254 326";
    int tab[ 20 ];
   
    std::cout << tekst << std::endl << std::endl;
   
    int n = string2int( tekst, tab );
   
    for( int i = 0; i < n; i++ )
         std::cout << tab[ i ] << std::endl;
   
    return 0;
}

int potega( const int a, const int b ) {
    if( b == 0 ) return 1;
   
    return a * potega( a, b - 1 );
}

int string2int( const std::string & st, int * tbl ) {
    int licz_t = 0;
    int liczba = 0;
    int licznik = 0;
    for( int i = st.length() - 1; i >= 0; i-- ) {
        if( st[ i ] == ' ' ) {
            tbl[ licz_t++ ] = liczba;
            licznik = 0;
            liczba = 0;
            continue;
        }
        liczba +=(( int ) st[ i ] -( int )( '0' ) ) * potega( 10, licznik );
        licznik++;
    }
    tbl[ licz_t++ ] = liczba;
    return licz_t;
}
P-104926
libed
» 2014-02-18 20:38:19
Podstawy systemów liczbowych.

123 = 1*(10^2) + 2*(10^1) + 3*(10^0)
123 = 1*100 + 2*10 + 3*1
123 = 100 + 20 + 3;

C/C++
int StringToInt( const std::string & strNumber ) {
    int result = 0;
    for( unsigned int i = 0; i < strNumber.length(); ++i )
    if(( strNumber[ i ] > 47 ) &&( strNumber[ i ] < 58 ) )
         result +=(( strNumber[ i ] - 48 ) *( std::pow( 10, strNumber.length() - 1 - i ) ) );
    else return 0;
   
    return result;
}
P-104927
Monika90
» 2014-02-18 22:17:49
@Alixir

C/C++
int potega( const int, const int );
W ten sposób użyte const w deklaracji funkcji będzie zignorowane przez kompilator (choć w definicji ignorowane nie jest). Moim zdaniem pisanie zbędnych słów kluczowych jest bez sensu.
P-104945
alixir
» 2014-02-19 07:11:32
Monika z pomijaniem pewnie masz rację, a co do zbędności to już kwestia gustu, choć i tu muszę sie zgodzić, bo w przypadku prostych zmiennych to nie ma sensu.
P-104953
« 1 »
  Strona 1 z 1