Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

C: opet me muce stringovi + nizovi ?????

[es] :: C/C++ programiranje :: C/C++ za početnike :: C: opet me muce stringovi + nizovi ?????

Strane: 1 2

[ Pregleda: 7208 | Odgovora: 35 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

EmmaR
Srbija

Član broj: 269847
Poruke: 466



+172 Profil

icon C: opet me muce stringovi + nizovi ?????13.01.2013. u 22:16 - pre 136 meseci
Treba uneti neki string-niz odjednom kao obican string, nesto poput
Citat:
1a25b3+7
i zatim iz toga napraviti prave nizove: jedan koji bi se sastojao od brojeva a drugi od preostalih znakova. Hm, to nije problem... Problem je u tome sto iz (npr)
Citat:
1a25b3+7
, rezultujuci brojcani niz treba da se sastoji od clanova:
Citat:
1, 25, 3, 7
, tj. susedne cifre treba da se spajaju u jedan broj.
strcat() odbija da prihvati promenljiv drugi argument, isto kao i strcpy. Radi
Code:
strcat( string1, string2);
ali ne i
Code:
strcat(string1, string2[i]);

Kako dodeliti vrednost oblika nesto nekom clanu drugog niza i / ili prosiriti neki string za odredjeni znak (znak po znak)?
Kako konvertovati string / char u broj? Isti problem: ne prihvata
Code:
atoi(string[i])


P.S. Znam kako to sve da uradim tamo gde postoje pravi stringovi i pravi nizovi i gde je dozvoljeno jednostavno prosirenje stringova (npr):
Code:
string3 = string1 + string2
i gde nije bitno da li se pristupa celom stringu ili odredjenom znaku iz stringa. Ali, hocu to da uradim i u C-eu. Ako je moguce.
ER
 
Odgovor na temu

4co_R

Član broj: 268314
Poruke: 74
*.mbb.telenor.rs.



+2 Profil

icon Re: C: opet me muce stringovi + nizovi ?????13.01.2013. u 23:42 - pre 136 meseci
Code:

#include<stdio.h>

int main(){

char str[10]="43aaakk";
int num;

num=atoi(str);
printf("%d",num);

return 0;
}

 
Odgovor na temu

EmmaR
Srbija

Član broj: 269847
Poruke: 466



+172 Profil

icon Re: C: opet me muce stringovi + nizovi ?????14.01.2013. u 01:20 - pre 136 meseci
Citat:
4co_R
Code:

#include<stdio.h>

int main(){

char str[10]="43aaakk";
int num;

num=atoi(str);
printf("%d",num);

return 0;
}



znam za to ali ne funkcionise za deo stringa i char.


Razdvajanje sam resila:
Code (c):

#include <stdio.h>       
#include <ctype.h>       
#include <string.h>    

int main()
{

        char ulaz[50];
     char znaci[25];  //ako je broj ovde ide 0
     char brojevi[25]; // ako je znak ovde ide *
     int i = 0;

        printf("\nUnesi neki niz ");
   
     getchar();    //zbog prethodnih getchar
     
     for(i=0; i<sizeof(ulaz);i++)
     {
          ulaz[i]=getchar();
          if ( ulaz[i]=='\n' )
                {
               printf("\nKraj unosa...");
               i = sizeof(ulaz);
                }
          else
          {
               if ( isdigit( ulaz[i] ) )
               {
                    brojevi[i]=ulaz[i];
                               znaci[i]='0';
               }
               else
               {
                    znaci[i]=ulaz[i];
                               brojevi[i]='*';
               }
        }

     }
   
     printf("... Originalni niz znakova : \t %s \n", ulaz);
     printf("... Znakovi : \t\t %s \n", znaci);
     printf("... Brojevi : \t\t %s \n", brojevi);
}
 


Ostaje problem kako "oziveti" brojeve: tj. treba mi pravi niz brojeva.

P.S. U editoru nije ovako "pijan" kod.

ER
 
Odgovor na temu

4co_R

Član broj: 268314
Poruke: 74
*.mbb.telenor.rs.



+2 Profil

icon Re: C: opet me muce stringovi + nizovi ?????14.01.2013. u 02:32 - pre 136 meseci
Mislim da je tvoj pristup ovom problemu pogrešan.

Ovo je neko moje "brzo" rešenje...nažalost nemam trenutno vremena da se više pozabavim ovim.

Code:


#include<stdio.h>

int main(){

char str[50]="absfct18547shdgfsd1sdgmsjd8sdgs7";
int num,i,n[50],k=0;;

for (i=0;i<50;i++){
if(isdigit(str[i]) && !isdigit(str[i-1]) ){
n[k]=atoi(&str[i]);
k++;
}

}
for (i=0;i<k;i++){
printf("n=%d\n",n[i]);
}
return 0;
}

 
Odgovor na temu

EmmaR
Srbija

Član broj: 269847
Poruke: 466



+172 Profil

icon Re: C: opet me muce stringovi + nizovi ?????14.01.2013. u 20:05 - pre 136 meseci
Citat:
4co_R: Mislim da je tvoj pristup ovom problemu pogrešan.

Ovo je neko moje "brzo" rešenje...nažalost nemam trenutno vremena da se više pozabavim ovim.

Code:


#include<stdio.h>

int main(){

char str[50]="absfct18547shdgfsd1sdgmsjd8sdgs7";
int num,i,n[50],k=0;;

for (i=0;i<50;i++){
if(isdigit(str[i]) && !isdigit(str[i-1]) ){
n[k]=atoi(&str[i]);
k++;
}

}
for (i=0;i<k;i++){
printf("n=%d\n",n[i]);
}
return 0;
}



Aha, pogresna pretpostavka da ce i cifre da cita znak po znak i da ce trebati da se spajaju da bi cinili broj, izmedju ostalog.

To je to: tvoje "brzo" resenje je resilo problem. Hvala.

Postoji li neka funkcija koja izracunava duzinu niza (nesto poput strlen za stringove)?
ER
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: C: opet me muce stringovi + nizovi ?????14.01.2013. u 20:23 - pre 136 meseci
Ema, rešenje koje je stavio 4co_R nije dobro.

U prvoj for petlji, u prvoj iteraciji za i=0 testira str[0] i str[-1], što je vrlo gruba greška.
Drugo, za tebe, početnika, korišćenje funkcije atoi nije dobro. Trebalo je sama da napišeš rutinu za parsiranje nizova cifara. Rešenje sa atoi je dobro ako je zadatak dat u delu udžbenika gde se obražuju bibliotečke rutine za konverziju, a nije u ovom delu gde je cilj bio da napraviš jednostavan program za parsiranje ulaznog stringa.

Ne postoji funkcija koja računa dužinu niza. Niz karaktera je specifičan po tome što je TERMINIRAN karakterom '\0', tj. bajtom sa vrednošću 0. Kod nizova celih brojeva, na primer, nula je jedna od mogućih vrednosti, pa se ne može koristiti kao terminator.
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: C: opet me muce stringovi + nizovi ?????14.01.2013. u 20:35 - pre 136 meseci
Što se to tiče tvog prvog posta:
Code (c):

strcat(string1, string2[i]);
 

ne može da uradi to što ti želiš jer funkcija zahteva da njeni argumenti budu tipa char* (pokazivač na char), a kod tebe je drugi argument tipa char.
da bi funkcija radila potrebno je napisati:
Code (c):

strcat(string1, &string2[i]);
 

ili (riskantno, treba izbegavati pointersku aritmetiku, osim ako tačno znaš šta radiš):
Code (c):

strcat(string1, string2+i);
 

ali u oba slučaja se dešava ono što ne želiš, a to je da se stringu jedan doda sadržaj stringa2 počevši od i-te pozicije, pa do kraja stringa 2. To nije ono što si želela da postigneš, a to je da dodaš tačno jedan karakter i to i-ti. To se postiže funkcijom strncat:
Code (c):

strncat(string1, &string2[i], 1);
 
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.3gnet.mts.telekom.rs.



+2789 Profil

icon Re: C: opet me muce stringovi + nizovi ?????14.01.2013. u 21:28 - pre 136 meseci
Evo tačnog rešenja:
Code (c):

#include <ctype.h>
#include <stdio.h>

int main()
{
    char unos[20];
    int brojevi[20];
    int brojac = 0;
    int broj = 0;
    int nadjena_cifra = 0;
    int i;

    fgets(unos, sizeof(unos), stdin);

    for (i = 0; i < sizeof(unos); ++i) {
        if (isdigit(unos[i])) {
            broj *= 10;
            broj += unos[i] - '0';
            nadjena_cifra = 1;
        } else {
            if (nadjena_cifra) {
                brojevi[brojac] = broj;
                ++brojac;
                broj = 0;
                nadjena_cifra = 0;
            }

            if (unos[i] == 0) {
                break;
            }
        }
    }

    for (i = 0; i < brojac; ++i) {
        printf("%d\n", brojevi[i]);
    }

    return 0;
}

Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

EmmaR
Srbija

Član broj: 269847
Poruke: 466



+172 Profil

icon Re: C: opet me muce stringovi + nizovi ?????15.01.2013. u 14:50 - pre 136 meseci
Citat:
Nedeljko: Evo tačnog rešenja:
Code (c):

#include <ctype.h>
#include <stdio.h>

int main()
{
    char unos[20];
    int brojevi[20];
    int brojac = 0;
    int broj = 0;
    int nadjena_cifra = 0;
    int i;

    fgets(unos, sizeof(unos), stdin);

    for (i = 0; i < sizeof(unos); ++i) {
        if (isdigit(unos[i])) {
            broj *= 10;
            broj += unos[i] - '0';
            nadjena_cifra = 1;
        } else {
            if (nadjena_cifra) {
                brojevi[brojac] = broj;
                ++brojac;
                broj = 0;
                nadjena_cifra = 0;
            }

            if (unos[i] == 0) {
                break;
            }
        }
    }

    for (i = 0; i < brojac; ++i) {
        printf("%d\n", brojevi[i]);
    }

    return 0;
}


Radi za brojeve, ali trebaju mi i znakovi (ne znam gde da u ovom kodu ubacim i to).

Idealno bi bilo da na kraju postoji jedan mesovit niz koji bi se sastojao i od stringova i od brojeva:
abc25sd1fg5 -> a, b, c, 25, s, d, 1, f, g, 5

Cilj je uneti neku racunski izraz i izracunati ga: 2+3*2 -> 8 zato su mi bitni i znakovi.
ER
 
Odgovor na temu

llux

Član broj: 63288
Poruke: 419
*.3gnet.mts.telekom.rs.



+253 Profil

icon Re: C: opet me muce stringovi + nizovi ?????15.01.2013. u 15:31 - pre 136 meseci
Kalkulator koji izbaci rezultat tek nakon unosa svih brojeva i operacija je dobra mozgalica za ucenje programiranja. Daj sve od sebe da sama resis ako ti nije zurba.
 
Odgovor na temu

EmmaR
Srbija

Član broj: 269847
Poruke: 466



+172 Profil

icon Re: C: opet me muce stringovi + nizovi ?????15.01.2013. u 15:46 - pre 136 meseci
Resen problem za znakove (problem je bio u pogresnom formatu kontrolne stampe, tacnije u jednom jedinom slovu).

Citat:
llux: Kalkulator koji izbaci rezultat tek nakon unosa svih brojeva i operacija je dobra mozgalica za ucenje programiranja. Daj sve od sebe da sama resis ako ti nije zurba.


Nigde ne zurim ali uveliko sanjam nizove.

Cekajte dok dodjem do zagrada.
ER
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.3gnet.mts.telekom.rs.



+2789 Profil

icon Re: C: opet me muce stringovi + nizovi ?????15.01.2013. u 22:51 - pre 136 meseci
Što ne reče odmah šta ti treba? Pa, to se uopšte ne radi tako.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

EmmaR
Srbija

Član broj: 269847
Poruke: 466



+172 Profil

icon Re: C: opet me muce stringovi + nizovi ?????16.01.2013. u 14:30 - pre 136 meseci
Citat:
Nedeljko: Što ne reče odmah šta ti treba? Pa, to se uopšte ne radi tako.


Kako? (smernice)
ER
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.3gnet.mts.telekom.rs.



+2789 Profil

icon Re: C: opet me muce stringovi + nizovi ?????16.01.2013. u 18:44 - pre 136 meseci
Hajde da pokušam da napišem skicu kako bi to što si zamislila moglo da se produži. Prvo definiši strukturu koja sadrži jedan znak, jedan broj i informaciju da li predstavlja znak ili broj. Onda napravi niz takvih objekata popunjen kako treba, a to je ovo što si pitala. Može se moj program prepraviti. Zatim računaj vrednost izraza na sledeći način:

1. Zameni sve brojeve omeđene zagradama samim brojevima bez zagrada.
2. Ako je u koraku 1 bilo zamena, pređi na korak 1.
3. Zameni sve delove oblika "+x" i "-x", gde je "x" broj i kojima ne prethodi desna zagrada ili broj rezultatom.
4. Ako je u koraku 3 bilo zamena, pređi na korak 1.
5. Pronađi prvi zdesna znak "^" i proveri da li je omeđen brojevima. Ako jeste, zameni ga rezultatom. Prvi zdesna ne znači samo prvi od kraja, nego i prvi zdesna od neke desne zagrade. Treba izvršiti sve takve zamene, pa ako je učinjena barem jedna, preći na korak 1.
6. Pronađi prvi od znakova "*" i "/" sleva i proveri da li je omeđen brojevima. Ako jeste, zameni ga rezultatom. Prvi sleva ne znači samo prvi od početka, nego i prvi sleva od neke leve zagrade. Treba izvršiti sve takve zamene, pa ako je učinjena barem jedna, preći na korak 1.
7. Pronađi prvi od znakova "+" i "-" i proveri da li je omeđen brojevima. Prvi sleva ne znači samo prvi od početka, nego i prvi sleva od neke leve zagrade. Treba izvršiti sve takve zamene, pa ako je učinjena barem jedna, preći na korak 1.
8. Poslednji član niza je broj koji je rezultat.

Inače se ovo ne radi tako, već postoji elegantnije rešenje bez pravljenja dodatnih nizova.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

EmmaR
Srbija

Član broj: 269847
Poruke: 466



+172 Profil

icon Re: C: opet me muce stringovi + nizovi ?????17.01.2013. u 20:23 - pre 136 meseci
Citat:
Nedeljko: Hajde da pokušam da napišem skicu kako bi to što si zamislila moglo da se produži. Prvo definiši strukturu koja sadrži jedan znak, jedan broj i informaciju da li predstavlja znak ili broj. Onda napravi niz takvih objekata popunjen kako treba, a to je ovo što si pitala. Može se moj program prepraviti. Zatim računaj vrednost izraza na sledeći način:

1. Zameni sve brojeve omeđene zagradama samim brojevima bez zagrada.
2. Ako je u koraku 1 bilo zamena, pređi na korak 1.
3. Zameni sve delove oblika "+x" i "-x", gde je "x" broj i kojima ne prethodi desna zagrada ili broj rezultatom.
4. Ako je u koraku 3 bilo zamena, pređi na korak 1.
5. Pronađi prvi zdesna znak "^" i proveri da li je omeđen brojevima. Ako jeste, zameni ga rezultatom. Prvi zdesna ne znači samo prvi od kraja, nego i prvi zdesna od neke desne zagrade. Treba izvršiti sve takve zamene, pa ako je učinjena barem jedna, preći na korak 1.
6. Pronađi prvi od znakova "*" i "/" sleva i proveri da li je omeđen brojevima. Ako jeste, zameni ga rezultatom. Prvi sleva ne znači samo prvi od početka, nego i prvi sleva od neke leve zagrade. Treba izvršiti sve takve zamene, pa ako je učinjena barem jedna, preći na korak 1.
7. Pronađi prvi od znakova "+" i "-" i proveri da li je omeđen brojevima. Prvi sleva ne znači samo prvi od početka, nego i prvi sleva od neke leve zagrade. Treba izvršiti sve takve zamene, pa ako je učinjena barem jedna, preći na korak 1.
8. Poslednji član niza je broj koji je rezultat.

Inače se ovo ne radi tako, već postoji elegantnije rešenje bez pravljenja dodatnih nizova.


Tako sam i ja nesto smislila: eliminisem prvo zagrade (sa svim onim sta se nalaze unutar njih) a onda slobodne * i / i na kraju + i - (stepenovanje nije bilo predvidjeno).

Citat:
Inače se ovo ne radi tako, već postoji elegantnije rešenje bez pravljenja dodatnih nizova


Hocu i ja jedan niz, ali kako da string prihvati stringove kao parametre: { "12","+","5","*","3",... } kada string u C i ne postoji (to je samo NIZ znakova, a cak ni niz nije bas niz)?

ER
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.3gnet.mts.telekom.rs.



+2789 Profil

icon Re: C: opet me muce stringovi + nizovi ?????29.01.2013. u 01:36 - pre 135 meseci
Kako ide?
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

EmmaR
Srbija

Član broj: 269847
Poruke: 466



+172 Profil

icon Re: C: opet me muce stringovi + nizovi ?????14.03.2013. u 20:33 - pre 134 meseci
Citat:
Nedeljko: Kako ide?


Tek sada videh ovo pitanje. Nikako, "projekat" privremeno obustavljen... iz subjektivno-objektivnih razloga.
Ja sam ti od onih koji znaju dan-noć da provedu rešavajući neki problem a kada iza toga stoji znanje nalik na švajcarski sir (sa primedbom da ima više rupa nego sira), to na kraju postane opasno po zdravlje.
Uglavnom, zaglavih se na aritmetičke prioritete ... i if i switch ... ništa. A još nije probano ni sa zagradama? (ova "problematika" razmatrana u VB, samo zbog početnog nejasnog problema oko nepostojanja stringa kao stringa u C, pa sam razbila na dva dela; a VB ima onaj tip variant koji trpi sve)
Ideja I: Obraditi prvo * i /, a zatim raditi sa + -. ovo sam pokušala na kraju sa switch (case slučajevi su znaci - operatori), pa dok god ima * ili / da obrađuje okolne brojeve, a kada stigne do kraja da se resetuje (brojač na 0, početak) a onda da krene redom, ... Međutim, nikako da propadne dalje od dva case (prihvati recimo * +, ali ako "zakomplikujem" pa ubacim još jedan dodatni znak / ili -, ne propada.
Ideja II: Ispitati znak pa ako je + ili -, ispitati naredni znak i u odnosu na njega preduzeti neku radnju u zavisnosti od prioriteta. Ovo je bilo nešto uspešnije, s tim što nikako nisam uspevala da ga nateram da obradi i poslednji znak.
Ideja III. Napraviti "mali milion pomoćnih nizova": prvo množiti, pa od toga napraviti niz, onda deliti, pa na kraju sabirati i oduzimati. A zagrade: da li je otvorena, da li je zatvorena, šta je unutra (ima li dodatnih zagrada), šta je ispred, šta je iza...?


Nego, javih se jer otkrih "toplu vodu":

Code (c):


//ovo kompajlirati sa opcijom: -std=c99  LINUX
//gcc -std=c99 fajl.c
//izvrsno ./a.out

#include <stdio.h>
#include <string.h>

int  main()
{
     //string kao niz?
     char * dani[]={"Ponedeljak","Utorak","Sreda","Cetvrtak","Petak","Subota","Nedelja","\0"};
     int duzina=0;
     

     while( dani[duzina]!="\0" )
     {
          duzina++; //racuna duzinu "string niza", ne prihvata strlen(dani)          
     }
     
     printf("\nSledi spisak dana u sedmici\n-----------------\n");
     for(int i=0; i<duzina;i++)
     {
          printf("%s\n",dani[i]);
     }

     return 0;
}

 


string kao niz... konačno...

nego, koliko je ovo opšte prihvaćeno? I, šta tačno predstavlja parametar: -std=c99?
ER
 
Odgovor na temu

4co_R

Član broj: 268314
Poruke: 74
*.mbb.telenor.rs.



+2 Profil

icon Re: C: opet me muce stringovi + nizovi ?????15.03.2013. u 00:26 - pre 134 meseci
Code:
 int i=0; 
u okviru for petlje je dozvoljeno u c99 standardu.

"string kao niz... konačno..."

Nije string kao niz nego niz stringova...

[Ovu poruku je menjao 4co_R dana 15.03.2013. u 02:53 GMT+1]
 
Odgovor na temu

EmmaR
Srbija

Član broj: 269847
Poruke: 466



+172 Profil

icon Re: C: opet me muce stringovi + nizovi ?????15.03.2013. u 15:52 - pre 134 meseci
Citat:
4co_R
Code:
 int i=0; 
u okviru for petlje je dozvoljeno u c99 standardu.


A ja mislila da je vezno za:
Code:
char * dani[]={"Ponedeljak","Utorak","Sreda","Cetvrtak","Petak","Subota","Nedelja","\0"};


Citat:

"string kao niz... konačno..."

Nije string kao niz nego niz stringova...


na to sam mislila, samo pobrkah red reci.



ER
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.3gnet.mts.telekom.rs.



+2789 Profil

icon Re: C: opet me muce stringovi + nizovi ?????15.03.2013. u 16:50 - pre 134 meseci
Ovo nikada nemoj da radiš
Code (c):

dani[duzina] != "\0"
 

Ovde se porede pokazivači, a ne stringovi. Ako je kompajler bukvalnu vrednost "\0" koja se pojavljuje u izvornom kodu na dva mesta zapamtio u binarnom kodu na dva mesta, onda će poređenje to dvoje dati rezultat da je različito. Dakle, može biti "\0" != "\0". Umesto toga koristi
Code (c):

strcmp(dani[duzina], "\0") != 0
 


Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: C: opet me muce stringovi + nizovi ?????

Strane: 1 2

[ Pregleda: 7208 | Odgovora: 35 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.