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

Dzielenie wyrazów między linijki

Ostatnio zmodyfikowano 2010-12-04 10:13
Autor Wiadomość
rafixxx25
Temat założony przez niniejszego użytkownika
Dzielenie wyrazów między linijki
» 2010-12-03 22:36:26
Witam!

Napotkałem kolejny problem. Robią program w konsoli gdy coś napiszę, a nie mieści się to w linii, program dzieli wyraz w dowolnym miejscu np:
"
Umożliwia abstrakcję danych oraz stosowanie kilku paradygmatów program
owania: proceduralnego, obiektowego i generycznego. Charakteryzuje się
 wysoką wydajnością kodu wynikowego, bezpośrednim dostępem do zasobów
sprzętowych i funkcji systemowych, łatwością tworzenia i korzystania z
 bibliotek (napisanych w C++, C lub innych językach), niezależnością o
d konkretnej platformy sprzętowej lub systemowej (co gwarantuje wysoką
 przenośność kodów źródłowych) oraz niewielkim środowiskiem uruchomien
iowym. Podstawowym obszarem jego zastosowań są aplikacje i systemy ope
racyjne.
"

Czy istnieje jakaś prosta komenda, która sprawi, ze będzie to wyglądało mniej więcej tak:

"
Umożliwia abstrakcję danych oraz stosowanie kilku paradygmatów
programowania: proceduralnego, obiektowego i generycznego.
Charakteryzuje się wysoką wydajnością kodu wynikowego, bezpośrednim
 dostępem do zasobów sprzętowych i funkcji systemowych, łatwością
tworzenia i korzystania z bibliotek (napisanych w C++, C lub innych
językach), niezależnością od konkretnej platformy sprzętowej lub
systemowej (co gwarantuje wysoką przenośność kodów źródłowych) oraz
niewielkim środowiskiem uruchomieniowym. Podstawowym obszarem jego
zastosowań są aplikacje i systemy operacyjne.
"


Pozdr. i z góry dzięki za pomoc :P
P-24806
DejaVu
» 2010-12-03 23:14:54
Nie istnieje - musisz sobie to napisać sam.
P-24808
ison
» 2010-12-03 23:25:59
nie istnieje chociażby dlatego że rozmiar konsoli możesz w każdej chwili zmieniać

//edit
nie jest idealne ale działa ;p (przynajmniej tak mi się zdaje)
C/C++
#include <cstdio>
#include <iostream>
#include <string>

const int CONSOLE_WIDTH = 80;
int SpaceLeft = CONSOLE_WIDTH - 1;

void PrintText( std::string text ) {
    while( text.size() ) {
        size_t width = text.find( " " );
        if( width == std::string::npos ) width = text.size();
       
        if(( int ) width < SpaceLeft ) SpaceLeft -= width + 1;
        else {
            SpaceLeft = CONSOLE_WIDTH - width - 2;
            std::cout << std::endl;
        }
        for( size_t i = 0; i <= width; ++i ) {
            if( width == text.size() && i == width ) break;
           
            std::cout << text[ i ];
            if( text[ i ] == '\n' ) SpaceLeft = CONSOLE_WIDTH - width - 2;
           
        }
        if( width != text.size() ) text = text.substr( width + 1, text.size() - width );
        else text = text.substr( width, text.size() - width );
       
    }
}

int main()
{
    PrintText( "aaaaaaaaaaaaaaaaaaaa bbbbbbbb cc ddddd eeeeeeeeeeeeee ffffff gggggg hhhhh iiii jjjjjjjjjj" );
}
P-24809
Pirotechnik
» 2010-12-04 08:21:58
już istnieje :)
P-24813
rafixxx25
Temat założony przez niniejszego użytkownika
» 2010-12-04 09:38:35
Twoja funkcja nie jest idealna(w niektórych miejscach nie potrzebnie przeskakuje np:

aaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaa
aaaaaaaaaa aaaaaaaaaaaaaaaaaaaaa                              
aaa aaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaa
aa aaaa aaaaaaaaaaa aaaaa aaaaa)

Ale i tak wielkie dzięki :)
Mam także pytanie:
Jeśli chce przenieść zdanie do nowej linijki, to da się to jakoś w twojej funkcji, czy muszę pisać np:
PrintTekst("aaaaaaaaaaaaaaa");
cout<<endl;
PrintTekst("aaaaaaa");

??
P-24815
ison
» 2010-12-04 09:48:08
być może gdzieś jest błąd zaraz rzucę okiem jeszcze raz

możesz użyć \n w środku PrintText i będzie to traktował jako nową linię

hmm, u mnie Twój przypadek program wypisał dobrze:
aaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaa                              aaa aaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaa aaaa aaaaaaaaaaa aaaaa aaaaa

Pamiętaj że funkcja PrintText zakłada że wypisuje tekst od początku, więc jeśli przed jej wywołaniem wypisujesz coś strumieniami to zmień zmienną SpaceLeft tak aby dopełnić do pełnej linii, nie możesz mieszać PrintText i zwykłego wypisywania tekstu w twoim programie - musisz zdecydować się na jedno.
Nie mogę znaleźć przypadku w którym by nie działało
P-24816
rafixxx25
Temat założony przez niniejszego użytkownika
» 2010-12-04 10:13:28
Aha, dobra dzięki :)
No to już wiem jak zrobić.
P-24817
« 1 »
  Strona 1 z 1