Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2007-04-10 22:17:46

  djlinux1992 - Użytkownik

djlinux1992
Użytkownik
Skąd: Zamość
Zarejestrowany: 2005-05-22

String nieskonczony?

Witam
Czy ktoś orientuje sie jesli chodzi o limit dlugosci stringa w C++ na kompilatorze GNU GCC ?
Czy zaalokuje poprawnie stringi o dlugosci 100 000 znakow i wiecej ? Czy jest nieograniczony pamieciowo (tz. ograniczony tylko przydzielonym RAMem :D) I z tą pamiecia to jest tak ze kazdy znak 1Bajt + kilka Bajtów dla "obudowy stringa" ?


[url=http://www.djlinux.xt.pl]Wojciech Stępniak[/url]

Offline

 

#2  2007-04-10 23:13:58

  Matthew - Użytkownik

Matthew
Użytkownik
Skąd: Lipka/Gdańsk (PG)
Zarejestrowany: 2006-06-09
Serwis

Re: String nieskonczony?

O którym stringu mówisz? Tablicy charów czy nagłówku <string>?

Offline

 

#3  2007-04-11 01:21:48

  zimzum - Członek DUG

zimzum
Członek DUG
Zarejestrowany: 2006-09-04

Re: String nieskonczony?

A ja Ci dam podpowiedz psychologiczna: pierwsze zadanie PA jest zawsze latwe ;-P A jak jest ze stringam to nie wiem. Latwo to obejsc. Zainteresuj sie dynamiczna alokacja pamieci.

Offline

 

#4  2007-04-11 12:19:44

  Robot_ - Członek DUG

Robot_
Członek DUG
Skąd: Zabrzeg
Zarejestrowany: 2006-07-04

Re: String nieskonczony?

Kod:

char [] ="jakiś długi string";

Powinien zaalokować odpowiednią ilość pamięci, a ile tego będzie to pewnie zależy już od systemu i maszyny na której to ma działać.

Co do ilości bajtów, to przy deklaracji jak powyżej to będzie ilość znaków + 1 { ) znak końca linii równy zero.

Pozdrawiam


Nie dyskutuj z debilem. Najpierw sprowadzi Cię do swojego poziomu, a potem pokona doświadczeniem

Offline

 

#5  2007-04-11 14:01:28

  harry666t - Członek DUG

harry666t
Członek DUG
Zarejestrowany: 2007-01-28

Re: String nieskonczony?

najłatwiej byłoby po prostu sprawdzić, i wrzucić do tego stringa ile wlezie (może przyda się poczytać w /usr/include/c++/(wersja)/{,bits/}).

jeśli klasa string okaże się niewystarczająca, można by napisać własną, zoptymalizowaną pod duże ilości tekstu.

stwórzmy jedną klasę, mystrchunk:

Kod:

class mystrchunk {
  char stuff[1024];
  mystrchunk* next;
public:
  /* konstruktory, accessory, kopiowanie, i te inne bzdury */
}

oraz kolejną, mystr:

Kod:

class mystr {
  vector<mystrchunk*> chunks;
public:
  /* konstruktory, accessory, kopiowanie, i te inne bzdury */
}

chodzi o to, że bierzesz sobie takiego mystringa, każesz mu dorzucić np 5000 bajtów, i on sobie leci po liście stringchunków, i jak musi zaalokować jakieś bzdury to robi append(new mystrchunk(buf)) do chunks czy coś w tym stylu... no wiesz, taka tam prosta lista. implementacja tego czegoś jako ciekawe ćwiczenie ;]

a nad przechowywaniem długich stringów w char* bym się zastanowił, bo może bardzo łatwo dojść do przepełnienia bufora!


[ /\/\/\ o_0 ----->>>       Ascii Art Userbar User ]

"steal and steal and steal some more and give it to all your friends and keep on stealin'"
- Reznor

Offline

 

#6  2007-04-11 14:29:28

  Robot_ - Członek DUG

Robot_
Członek DUG
Skąd: Zabrzeg
Zarejestrowany: 2006-07-04

Re: String nieskonczony?

jeśli chcesz robić to poprzez operator new to ogranicza nas jedynie ilość posiadanej pamięcie RAM + ewentualnie SWAP


Nie dyskutuj z debilem. Najpierw sprowadzi Cię do swojego poziomu, a potem pokona doświadczeniem

Offline

 

#7  2007-04-11 14:38:57

  djlinux1992 - Użytkownik

djlinux1992
Użytkownik
Skąd: Zamość
Zarejestrowany: 2005-05-22

Re: String nieskonczony?

Miałem na myśli <string> da rade ?
Czy może lepiej na stworzeniu dynamicznie tablicy char operatorem new ? :D


[url=http://www.djlinux.xt.pl]Wojciech Stępniak[/url]

Offline

 

#8  2007-04-11 15:48:18

  zimzum - Członek DUG

zimzum
Członek DUG
Zarejestrowany: 2006-09-04

Re: String nieskonczony?

Uwaga, bede sie wymadrzal ;-) A ze programowac nie umiem to tym bardziej trzeba uwazac :D

Moze sie troche przychrzaniam, ale moim zdaniem takie proste zadania lepiej optymalizowac na poziomie C. Jesli liczy sie czas wykonania to mozna w ten sposob troche zaoszczedzic. A zabawa z klasami to jak strzelanie z armaty do komary. Ale takie strzelanie tez jest ksztalcace. Chyba jestem troche zboczony. Ale to przez studia, wiec przymknijcie na to oko ;-)

A tak bardziej serio to ja od poczatku jestem za dynamiczna tablica char'ow. Ale wole to robic w C, bo uwazam, ze do prostych programow nalezy uzywac prostych (czyt. malo rozbudowanych) jezykow.

PS. dobrze strzelilem ze chodzi o zadanie z PA?

Offline

 

#9  2007-04-11 16:19:38

  djlinux1992 - Użytkownik

djlinux1992
Użytkownik
Skąd: Zamość
Zarejestrowany: 2005-05-22

Re: String nieskonczony?

...
PS. dobrze strzelilem ze chodzi o zadanie z PA?...
[/quote]
Tak :) Wole się upewnić, dzięki za odpowiedzi ;)


[url=http://www.djlinux.xt.pl]Wojciech Stępniak[/url]

Offline

 

#10  2007-04-14 16:33:12

  harry666t - Członek DUG

harry666t
Członek DUG
Zarejestrowany: 2007-01-28

Re: String nieskonczony?

no, to... skoro C...

Kod:

#include <stdlib.h>

int main (int argc, char* argv[]) {
  char* longstring;
  longstring = (char*) malloc (1024);
  longstring = "To jest bardzo dlugi przykladowy tekst. Zmiesi sie pod wskaznikiem longstring tak dlugo, dopoki nie przekroczy 1024 bajtow. Jezeli przekroczy, klapa. Efekt nieprzewidywalny... Gdy tekst nie bedzie juz nam potrzebny, nalezy uzyc funkji free(). uwaga, nie testowalem tego kodu. jak zwykle zadnej gwarancji.";
  free(longstring);
  exit (0);
}

Takie coś? malloc() zaalokuje tyle bajtów pamięci, ile mu każesz. Wspomoże się swapem jeśli zabraknie ramu i zawiesi kompa jeśli skończy się ram, swap, i nie ustawisz ulimit. Zwróci wskaźnik do zaalokowanej pamięci, gdzie możesz trzymać co-ci-się-tylko-podoba, na którym to wskaźniku musisz potem użyć free() - inaczej zgubisz wskaźnik, pamięć nadal będzie zeżarta, będziesz miał wyciek pamięci, nikt cię nie będzie kochał, dziewczyna cię rzuci, szef wywali z roboty, starzy wydziedziczą, a prościej byłoby użyć C++ i auto_ptr.


[ /\/\/\ o_0 ----->>>       Ascii Art Userbar User ]

"steal and steal and steal some more and give it to all your friends and keep on stealin'"
- Reznor

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)

[ Generated in 0.012 seconds, 11 queries executed ]

Informacje debugowania

Time (s) Query
0.00010 SET CHARSET latin2
0.00007 SET NAMES latin2
0.00102 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.145.85.178' WHERE u.id=1
0.00102 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.145.85.178', 1715755921)
0.00052 SELECT * FROM punbb_online WHERE logged<1715755621
0.00085 SELECT topic_id FROM punbb_posts WHERE id=57733
0.00202 SELECT id FROM punbb_posts WHERE topic_id=7572 ORDER BY posted
0.00073 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=7572 AND t.moved_to IS NULL
0.00007 SELECT search_for, replace_with FROM punbb_censoring
0.00110 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=7572 ORDER BY p.id LIMIT 0,25
0.00149 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=7572
Total query time: 0.00899 s