Wczytywanie tekstu w formie wierszy i kolumn
Ostatnio zmodyfikowano 2014-06-22 16:39
MrKreistos Temat założony przez niniejszego użytkownika |
Wczytywanie tekstu w formie wierszy i kolumn » 2014-06-06 22:46:32 Chciałbym uzyskać coś w tym stylu: to jes t przy kładow y teks t chiałem to uzyskać przez: #include<iostream>
int main() { int exit = 0; char text[ 6 ][ 10 ]; int w_wierszu = 0; int w_kolumnie = 0; std::cout << "podaj tekst: "; for( w_kolumnie = 0; w_kolumnie < 10 || exit != 1; w_kolumnie++ ) { for( w_wierszu = 0; w_wierszu < 6; w_wierszu++ ) { std::cin >> text[ w_wierszu ][ w_kolumnie ]; if( text[ w_wierszu ][ w_kolumnie ] == 0 ) { exit = 1; } } } exit = 0; w_wierszu = 0; w_kolumnie = 0; for( w_kolumnie = 0; w_kolumnie < 10 || exit != 1; w_kolumnie++ ) { for( w_wierszu = 0; w_wierszu < 6; w_wierszu++ ) { std::cout << text[ w_wierszu ][ w_kolumnie ]; if( text[ w_wierszu ][ w_kolumnie ] == 0 ) { exit = 1; } } } return 0; }
Ten kod to fragment programu który ma używać szyfru transpozycyjnego(pochodna szyfru przestawieniowego) http://pl.wikipedia.org/wiki/Szyfr_przestawieniowyWczytywanie miało się zatrzymać po wpisaniu tekstu i klepnięciu ENTER. Proszę o pomoc. |
|
pekfos |
» 2014-06-07 20:28:38 Chciałbym uzyskać coś w tym stylu:
to jes t przy kładow y teks t |
Czyli, ze podczas wprowadzania danych automatycznie program będzie wyświetlał wpisywane dane w liniach po 6 znaków? Tego efektu nie uzyskasz z użyciem takich gotowców jak std::cin. |
|
MrKreistos Temat założony przez niniejszego użytkownika |
» 2014-06-11 15:17:47 Nie do końca. Chodzi raczej o to aby uzyskać taki szyk w tabeli dwuwymiarowej:
text[0][0]=t text[0][1]=o text[0][2]=_ text[0][3]=j text[0][4]=e text[0][5]=s text[1][0]=t text[1][1]=_ text[1][2]=p text[1][3]=r text[1][4]=z text[1][5]=y text[2][0]=k text[2][1]=l text[2][2]=a text[2][3]=d text[2][4]=o text[2][5]=w //itd
ale jestem oczywiście otwarty na propozycje użycia jakiś innych funkcji. Program nie musi wyświetlać tego w takiej formie. Chodzi o samo wczytanie. |
|
pekfos |
» 2014-06-11 15:34:09 Wczytaj linię do std::string a potem sobie podziel. |
|
Adik80 |
» 2014-06-11 16:10:07 A takie cos nie zadziala?: char s[ 10 ][ 6 ]; int lines = 0; while( lines < 10 && std::cin.get( s[ lines ], 6 ).gcount() ) ++lines; |
|
pekfos |
» 2014-06-11 16:27:58 A takie cos nie zadziala?:
|
Sprawdź..? |
|
00Andre |
» 2014-06-11 23:27:37 Jest to mój pomysł na zrobienie tego, trochę jest kodu ale działa poprawnie ;) (trochę się namęczyłem, ale udało się) Program pobiera tekst z pliku, potem każdej linijki znak przypisuje do tablicy oraz jest obliczana ilość kolumn i gdy będzie równe 6 to jest dodawany wiersz, a licznik kolumn ustawiony na 0. Także jest liczone wszystkie znaki przepisane. Przy wypisaniu to na ekran jest trochę trudniej. Ponieważ gdy zrobimy normalnie dwie pętle to wypisze te które są zaliczone do sześciu, a są teksty gdzie ilość znaków jest nie regularna i jest reszta z dzielenia przez 6 więc trzeba też je wypisać, więc jeśli nie jest równe to wypiszę resztę znaków #include <iostream> #include <string> #include <fstream> #include <vector> #include <windows.h>
int main() { std::vector < std::string > zawartosc; char linia[ 50 ][ 6 ]; std::fstream plik; plik.open( "tekst.txt", std::ios::in ); if( plik ) { plik.seekp( 0, std::ios::beg ); for( unsigned a = 0; !plik.eof(); a++ ) { std::string linia = ""; getline( plik, linia ); zawartosc.push_back( linia ); } } plik.close(); int lwiersz = 0; int lkolumn = 0; int licznik_znakow = 0; for( unsigned a = 0; a < zawartosc.size(); a++ ) { for( unsigned b = 0; b < zawartosc[ a ].length(); b++ ) { if( lkolumn == 6 ) { ++lwiersz; lkolumn = 0; } linia[ lwiersz ][ lkolumn ] = zawartosc[ a ].at( b ); ++lkolumn; ++licznik_znakow; } } if( lwiersz * 6 == licznik_znakow ) { for( unsigned a = 0; a < lwiersz; a++ ) { for( unsigned b = 0; b < 6; b++ ) { std::cout << "[" << a << "][" << b << "]: " << linia[ a ][ b ] << std::endl; Sleep( 500 ); } } } else { int ostatni_wiersz = lwiersz; for( unsigned a = 0; a < lwiersz; a++ ) { for( unsigned b = 0; b < 6; b++ ) { std::cout << "[" << a << "][" << b << "]: " << linia[ a ][ b ] << std::endl; Sleep( 500 ); } } int reszta = 0; reszta = licznik_znakow -( lwiersz * 6 ); int i = 0; for( unsigned a = lwiersz; a < lwiersz + reszta; a++ ) { std::cout << "[" << ostatni_wiersz << "][" << i << "]: " << linia[ ostatni_wiersz ][ i ] << std::endl; Sleep( 500 ); ++i; } } return 0; }
Wspomij o mnie jeśli tego użyjesz w jakimś swoim projekcie ;)00Andre |
|
pekfos |
» 2014-06-12 12:47:28 Wygląda na przekombinowane i nie chodziło o odczyt z pliku. for( unsigned a = 0; !plik.eof(); a++ )
|
2/3 bez sensu, reszta nie do końca poprawna. |
|
« 1 » 2 3 |