lynx |
» 2008-12-25 20:56:19 Nazwa tablicy jest jednocześnie wskaźnikiem do jej zerowego elementu, a więc chcąc zwracać c (czyli wskaźnik do pierwszego elementu tablicy int) musisz przerobić funkcję aby zwracała wskaźnik do int, a nie typ int. Zamień int rozdzielaj(...) na *int rozdzielaj(...) i powiedz czy działa.
/edit1: Sorry, jeżeli zwracamy wskaźnik piszemy int* rozdzielaj(...). |
|
DejaVu |
» 2008-12-25 21:08:15 Widzę, że dyskusja trwa, więc pozwolę sobie podać najprostszy sposób z możliwych na wczytywanie danych: #include <iostream> using namespace std; #include <conio.h>
int main() { int liczba[ 500 ]; char znak; for( int i = 0; i < 3; i++ ) { cin >> liczba[ i ]; if( i != 2 ) cin >> znak; } for( int i = 0; i < 3; i++ ) cout << liczba[ i ] << ", "; getch(); return 0; }
|
|
pekfos Temat założony przez niniejszego użytkownika |
» 2008-12-26 11:12:57 coś te moje rozwiązanie nie jest zbyt dobre... :( #include <sstream> #include <iostream> #include <conio.h> using namespace std;
int * rozdzielaj( string a, char b, int c[] ) { int d = a.length(); int f = 0; for( int e = 0; e < d; e++ ) { if( a[ e ] == b ) f++; } string h[ f ]; string i = ""; int j = 0; for( int g = 0; g < d; g++ ) { if( a[ g ] != b ) i += a[ g ]; if( a[ g ] == b ) { h[ j ] = i; j++; } } stringstream l; for( int k = 0; k < f; k++ ) { l << h[ k ]; l >> c[ k ]; } return c; }
int main() { string tekst; int tablica[ 30 ]; getline( cin, tekst ); rozdzielaj( tekst, ';', tablica ); for( int z = 0; z < 30; z++ ) cout << tablica[ z ]; getch(); return 0; } jak wprowadzam '23' do programu to wywala ciąg kilku linijek cyfr |
|
pekfos Temat założony przez niniejszego użytkownika |
» 2008-12-26 17:40:17 a jak wygląda budowa i użycie funkcji która zwraca całą tablicę? |
|
lynx |
» 2008-12-26 20:38:36 A czy nie lepiej jest zwrócić wskaźnik do niej? Taki sposób jest o wiele wydajniejszy. :) |
|
pekfos Temat założony przez niniejszego użytkownika |
» 2008-12-27 11:38:50 znalazłem jeszcze wydajniejszy sposób w kursie. tworzy się tablicę na zewnątrz funkcji i podaje się ja w parametrach z referencją dzięki czemu wartość tablicy zmieni się po zakończeniu działania funkcji. najlepiej zamiast tablicy dać vectora bo jak programista się pomyli i zadeklaruje za mało elementów w tablicy to koniec pracy programu. wykorzystam to do ulepszenia mojej funkcji :) |
|
pekfos Temat założony przez niniejszego użytkownika |
» 2008-12-27 15:55:07 #include <iostream> #include <conio.h> #include <sstream> #include <queue> using namespace std;
void inttab( queue < int > & a, string b, char e ) { int c = b.length(); queue < string > f; string g = ""; for( int d = 0; d < c; d++ ) { if( b[ d ] == e ) { f.push( g ); g = ""; } if( b[ d ] != e ) g += b[ d ]; } f.push( g ); stringstream j; int t; for( int i = 0; i < f.size(); i++ ) { j << f.front(); j >> t; f.pop(); a.push( t ); } }
int main() { string tekst = ""; getline( cin, tekst ); queue < int > kolejka; char znak = ';'; inttab( kolejka, tekst, znak ); for( int a = 0; a < kolejka.size(); a++ ) { cout << kolejka.front() << endl; kolejka.pop(); } getch(); return 0; } hmm.. działa dosyć dobrze ..dopóki się nie wprowadzi więcej niż jednej liczby nie wiem czemu ale funkcja zwraca kolejkę z tylko jedną liczbą :( |
|
setless |
» 2008-12-27 16:04:24 Jeżeli problem polega tylko na wprowadzaniu liczb, z założeniem że średnik będzie owe liczby oddzielał to można zrobić to również w ten sposób: #include <iostream> #include <conio.h>
using namespace std;
int main() { int tab[ 20 ], liczba = 0, i = 0; char znak; bool koniec = false; while( !koniec ) { znak = cin.peek(); if(( znak == ';' ) ||( znak == ' ' ) ) { cin.ignore( 1 ); continue; } if(( int( znak ) == 10 ) ||( int( znak ) == - 1 ) ) break; if(( int( znak ) < int( '0' ) ) ||( int( znak ) > int( '9' ) ) ) { cin.ignore( 1 ); continue; } cin >> tab[ i ]; i++; } for( liczba = 0; liczba < i; liczba++ ) cout << "Element " << liczba + 1 << ": " << tab[ liczba ] << endl; getch(); return 0; }
Dla przejrzystości można if'y zamienić na switch, to wedle uznania. Natomiast jeżeli nie oto chodziło to przepraszam za swoje przysłowiowe 3 grosze ;D. |
|
1 2 « 3 » 4 |