Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
ivek imudaš Forumaš(ica)
Pridružen/a: 13. 11. 2007. (18:41:02) Postovi: (67)16
Spol:
|
|
[Vrh] |
|
Luuka Forumaš(ica)
Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16
Spol:
Lokacija: Hakuna Matata
|
Postano: 12:57 sub, 28. 6. 2008 Naslov: Re: problem sa stringovima |
|
|
[quote="ivek imudaš"]1.zašto ne mogu učitati nešto tipa char s pa nakon toga nešto tipa char c[broj] ?kad to pokušam i pokrenem program učitam željeni znak pa nakon toga string program mi ne izvrši što bi trebao a ako inicijaliziram npr s='a' onda obavi što treba[/quote]
Probaj nakon učitavanja znaka stavit [tt]scanf("%*c");[/tt], to će zanemarit onaj \n kojeg lupiš nakon chara :)
[quote="ivek imudaš"]
3.kako se upiše polje stringova, je li to npr.char *s[broj] ?
ako je kako se onda vrši alokacija memorije za to?[/quote]
Za polje stringova može se pisat recimo char s[10][20], a to će biti polje od 20 stringova duljine 10. Tu nije loše napravit recimo
[code:1]typedef MojString char[10];
MojString s[20]; [/code:1]
(nisam ziher za sintaxu, al mislim da se kuži kaj hoću reć)
Napraviš neki svoj string, koji je duljine maximalno 10, i onda polje od 20 elemenata tih TvojihStringova. ;)
ivek imudaš (napisa): | 1.zašto ne mogu učitati nešto tipa char s pa nakon toga nešto tipa char c[broj] ?kad to pokušam i pokrenem program učitam željeni znak pa nakon toga string program mi ne izvrši što bi trebao a ako inicijaliziram npr s='a' onda obavi što treba |
Probaj nakon učitavanja znaka stavit scanf("%*c");, to će zanemarit onaj \n kojeg lupiš nakon chara
ivek imudaš (napisa): |
3.kako se upiše polje stringova, je li to npr.char *s[broj] ?
ako je kako se onda vrši alokacija memorije za to? |
Za polje stringova može se pisat recimo char s[10][20], a to će biti polje od 20 stringova duljine 10. Tu nije loše napravit recimo
Kod: | typedef MojString char[10];
MojString s[20]; |
(nisam ziher za sintaxu, al mislim da se kuži kaj hoću reć)
Napraviš neki svoj string, koji je duljine maximalno 10, i onda polje od 20 elemenata tih TvojihStringova.
_________________ "Bolje bi prolazio na faxu da sam na drogama nego na netu" - by a friend of mine
"Poslije spavanja doma spavanje bilo di mi je najdraža stvar" - by the same guy
|
|
[Vrh] |
|
ivek imudaš Forumaš(ica)
Pridružen/a: 13. 11. 2007. (18:41:02) Postovi: (67)16
Spol:
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 16:30 sub, 28. 6. 2008 Naslov: Re: problem sa stringovima |
|
|
[quote="Luuka"][quote="ivek imudaš"]1.zašto ne mogu učitati nešto tipa char s pa nakon toga nešto tipa char c[broj] ?kad to pokušam i pokrenem program učitam željeni znak pa nakon toga string program mi ne izvrši što bi trebao a ako inicijaliziram npr s='a' onda obavi što treba[/quote]
Probaj nakon učitavanja znaka stavit [tt]scanf("%*c");[/tt], to će zanemarit onaj \n kojeg lupiš nakon chara :)[/quote]
:ccc:
Treba samo drugi [tt]char[/tt] ucitati sa [tt]scanf(" %c", &c);[/tt] (dakle, razmak ispred [tt]%c[/tt]). :)
Ref. tocka 2: [tt]goto[/tt] je zlo i pozeljno je ne koristiti ga. :tso:
Luuka (napisa): | ivek imudaš (napisa): | 1.zašto ne mogu učitati nešto tipa char s pa nakon toga nešto tipa char c[broj] ?kad to pokušam i pokrenem program učitam željeni znak pa nakon toga string program mi ne izvrši što bi trebao a ako inicijaliziram npr s='a' onda obavi što treba |
Probaj nakon učitavanja znaka stavit scanf("%*c");, to će zanemarit onaj \n kojeg lupiš nakon chara |
Treba samo drugi char ucitati sa scanf(" %c", &c); (dakle, razmak ispred %c).
Ref. tocka 2: goto je zlo i pozeljno je ne koristiti ga.
_________________ U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
|
|
[Vrh] |
|
ivek imudaš Forumaš(ica)
Pridružen/a: 13. 11. 2007. (18:41:02) Postovi: (67)16
Spol:
|
Postano: 16:41 sub, 28. 6. 2008 Naslov: Re: problem sa stringovima |
|
|
[quote="vsego"]
:ccc:
Treba samo drugi [tt]char[/tt] ucitati sa [tt]scanf(" %c", &c);[/tt] (dakle, razmak ispred [tt]%c[/tt]). :)
Ref. tocka 2: [tt]goto[/tt] je zlo i pozeljno je ne koristiti ga. :tso:[/quote]
na kakve li ja trivijalnosti trošim vrijeme :(
ovo goto mi je trebalo za funkciju
(treba svako treće slovo izbaciti iz stringa)
[code:1]
void svakotrece(char s[]){
int kraj, i, j=0, l=0;
for(i=0;s[i]!='\0';i++){
if(isalpha(s[i])){
++j;
if(j%3==0) goto kraj;
}
s[l++]=s[i];
kraj:{
//*ovo je trece slovo pa ga preskacemo*//
}}
s[l]='\0';
printf("%s\n", s);
}
[/code:1]
mislim da radi ok, ali nisam bio siguran sa inicijalizacijom itd
vsego (napisa): |
Treba samo drugi char ucitati sa scanf(" %c", &c); (dakle, razmak ispred %c).
Ref. tocka 2: goto je zlo i pozeljno je ne koristiti ga. |
na kakve li ja trivijalnosti trošim vrijeme
ovo goto mi je trebalo za funkciju
(treba svako treće slovo izbaciti iz stringa)
Kod: |
void svakotrece(char s[]){
int kraj, i, j=0, l=0;
for(i=0;s[i]!='\0';i++){
if(isalpha(s[i])){
++j;
if(j%3==0) goto kraj;
}
s[l++]=s[i];
kraj:{
//*ovo je trece slovo pa ga preskacemo*//
}}
s[l]='\0';
printf("%s\n", s);
}
|
mislim da radi ok, ali nisam bio siguran sa inicijalizacijom itd
Zadnja promjena: ivek imudaš; 16:54 sub, 28. 6. 2008; ukupno mijenjano 1 put.
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 16:52 sub, 28. 6. 2008 Naslov: |
|
|
Nije li lakse tvoj kod:
[code:1]void svakotrece(char s[]){
int kraj, i, j=0, l=0;
for (i = 0; s[i] != '\0'; i++) {
if (isalpha(s[i])) {
++j;
if(j%3 == 0) goto kraj;
}
s[l++] = s[i];
kraj:{
//*ovo je trece slovo pa ga preskacemo*//
}
}
s[l]='\0';
printf("%s\n", s);
}[/code:1]
zamijeniti s
[code:1]void svakotrece(char s[]){
int kraj, i, j=0, l=0;
for (i = 0; s[i] != '\0'; i++) {
if (isalpha(s[i])) {
++j;
if(j%3 != 0) s[l++] = s[i];
} else s[l++] = s[i];
}
s[l]='\0';
printf("%s\n", s);
}[/code:1]
ili s
[code:1]void svakotrece(char s[]){
int kraj, i, j=0, l=0;
for (i = 0; s[i] != '\0'; i++) {
if (isalpha(s[i])) {
++j;
if(j%3 == 0) continue;
}
s[l++] = s[i];
}
s[l]='\0';
printf("%s\n", s);
}[/code:1]
:?:
Nije li lakse tvoj kod:
Kod: | void svakotrece(char s[]){
int kraj, i, j=0, l=0;
for (i = 0; s[i] != '\0'; i++) {
if (isalpha(s[i])) {
++j;
if(j%3 == 0) goto kraj;
}
s[l++] = s[i];
kraj:{
//*ovo je trece slovo pa ga preskacemo*//
}
}
s[l]='\0';
printf("%s\n", s);
} |
zamijeniti s
Kod: | void svakotrece(char s[]){
int kraj, i, j=0, l=0;
for (i = 0; s[i] != '\0'; i++) {
if (isalpha(s[i])) {
++j;
if(j%3 != 0) s[l++] = s[i];
} else s[l++] = s[i];
}
s[l]='\0';
printf("%s\n", s);
} |
ili s
Kod: | void svakotrece(char s[]){
int kraj, i, j=0, l=0;
for (i = 0; s[i] != '\0'; i++) {
if (isalpha(s[i])) {
++j;
if(j%3 == 0) continue;
}
s[l++] = s[i];
}
s[l]='\0';
printf("%s\n", s);
} |
_________________ U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
|
|
[Vrh] |
|
Luuka Forumaš(ica)
Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16
Spol:
Lokacija: Hakuna Matata
|
|
[Vrh] |
|
ivek imudaš Forumaš(ica)
Pridružen/a: 13. 11. 2007. (18:41:02) Postovi: (67)16
Spol:
|
|
[Vrh] |
|
Luuka Forumaš(ica)
Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16
Spol:
Lokacija: Hakuna Matata
|
Postano: 17:14 sub, 28. 6. 2008 Naslov: |
|
|
Prvo da sam sebe ispravim, gore sam reko krivo... dakle, polje od 10 stringova duljine 20 bi bilo char s[10][20] (prvo koliko ih ima, onda kolko su maximalno dugi)
A uvijek si to polje stringova možeš zamislit kao neke kvazi matrice (što to ustvari i jest)
Dakle, po recima imaš stringove, a za svaki redak ti stupci idu od 0 do 19 i to su znakovi koji čine tvoj string. Jasno, ako je string manji od tog, jedan od tih znakova prije indexa 19 će bit \0 pa ustvari imaš neki "podskup" matrice... recimo:
BLABLA
BLABLABLABLA
BLABLABLA
bi deklarirao kao char s[3][13] (za drugi index uzmeš maximum od duljina stringova koje imaš u polju)
Za deklaracije oblika char *s[nešto] bolje nek se vsego izjasni, jer mislim da tu može doć do svega...
Prvo da sam sebe ispravim, gore sam reko krivo... dakle, polje od 10 stringova duljine 20 bi bilo char s[10][20] (prvo koliko ih ima, onda kolko su maximalno dugi)
A uvijek si to polje stringova možeš zamislit kao neke kvazi matrice (što to ustvari i jest)
Dakle, po recima imaš stringove, a za svaki redak ti stupci idu od 0 do 19 i to su znakovi koji čine tvoj string. Jasno, ako je string manji od tog, jedan od tih znakova prije indexa 19 će bit \0 pa ustvari imaš neki "podskup" matrice... recimo:
BLABLA
BLABLABLABLA
BLABLABLA
bi deklarirao kao char s[3][13] (za drugi index uzmeš maximum od duljina stringova koje imaš u polju)
Za deklaracije oblika char *s[nešto] bolje nek se vsego izjasni, jer mislim da tu može doć do svega...
_________________ "Bolje bi prolazio na faxu da sam na drogama nego na netu" - by a friend of mine
"Poslije spavanja doma spavanje bilo di mi je najdraža stvar" - by the same guy
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 19:33 sub, 28. 6. 2008 Naslov: |
|
|
[quote="Luuka"]@vsego Što točno radi taj razmak ispred " %c" ? Za zvjezdicu znam da pročita nešto, pa zanemari (ne spremi nigdje).[/quote]
Taj razmak kaze "odignoriraj sve whitespaceove (razmake, tabove, newlineove i carriage returnove). :)
Sto se tice polja stringova, to je raspisano u vjezbama. :) Ja ne volim mijesati staticke i dinamicke nizove (poput [tt]char *s[nesto][/tt]), jer je tu obicno jako konfuzno sto se dogadja. :| Ako zelite dinamicki, onda
[tt]char **s;[/tt]
i onda se napravi dinamicka alokacija svega; ako zelite staticki, onda ovako kako je Luuka napisao. 8)
Ako cemo mijesati sintaksu, onda je
[tt]char *s[nesto];[/tt]
ekvivalentno
[tt]char *(s[nesto]);[/tt]
tj. [tt]s[/tt] je niz od 10 pointera na [tt]char[/tt], sto znaci da treba dinamicki alocirati pojedine stringove, ali ne i sam niz. 8)
Luuka (napisa): | @vsego Što točno radi taj razmak ispred " %c" ? Za zvjezdicu znam da pročita nešto, pa zanemari (ne spremi nigdje). |
Taj razmak kaze "odignoriraj sve whitespaceove (razmake, tabove, newlineove i carriage returnove).
Sto se tice polja stringova, to je raspisano u vjezbama. Ja ne volim mijesati staticke i dinamicke nizove (poput char *s[nesto]), jer je tu obicno jako konfuzno sto se dogadja. Ako zelite dinamicki, onda
char **s;
i onda se napravi dinamicka alokacija svega; ako zelite staticki, onda ovako kako je Luuka napisao.
Ako cemo mijesati sintaksu, onda je
char *s[nesto];
ekvivalentno
char *(s[nesto]);
tj. s je niz od 10 pointera na char, sto znaci da treba dinamicki alocirati pojedine stringove, ali ne i sam niz.
_________________ U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
|
|
[Vrh] |
|
|