www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

string vsv array of char
Pojdi na stran 1, 2  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3361
Aktiv.: 14.18
Kraj: Dragomer

PrispevekObjavljeno: Čet Jan 28, 2016 10:53 am    Naslov sporočila:  string vsv array of char Odgovori s citatom

Učim se.

Ugotavljam: Niz lahko definiram na dva načina, ali kot string ali kot pointer na array of char:

Koda:
     String strx = "To je tekst.";
     Serial.println(strx);
     
 
     char* niz[20] = {"To je tekst 2."};
     Serial.println(niz[0]);


Fino. Sedaj bi pa rad imel eno samo spremenljivko tipa ki bi bila tako string, ki bi ga obdeloval kot string in bi uporabljal string funkcije, kot tudi kot niz znakov, da bi manipuliral s posameznimi bajti niza.

Pomoč!

_________________
Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vpeter
Član
Član



Pridružen-a: Pon 11 Jun 2012 16:05
Prispevkov: 369
Aktiv.: 2.33
Kraj: Maribor okolica

PrispevekObjavljeno: Čet Jan 28, 2016 1:04 pm    Naslov sporočila:   Odgovori s citatom

Koda:
char* niz[20]
To je polje 20 kazalcev na char in ne pointer na array of char.
Nazaj na vrh
Prisoten Poglej uporabnikov profil Pošlji zasebno sporočilo
S53DZ
Član
Član



Pridružen-a: Čet 28 Apr 2011 9:27
Prispevkov: 951
Aktiv.: 5.52
Kraj: Ljubljana

PrispevekObjavljeno: Čet Jan 28, 2016 1:35 pm    Naslov sporočila:   Odgovori s citatom

Morda iščeš tole:
Koda:
   char niz1[20] = "abcdefgh";

   ch = *(niz1 + 3);

v ch je 4. znak iz niza1.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3361
Aktiv.: 14.18
Kraj: Dragomer

PrispevekObjavljeno: Čet Jan 28, 2016 2:05 pm    Naslov sporočila:   Odgovori s citatom

S53DZ je napisal/a:
Morda iščeš tole:
Koda:
   char niz1[20] = "abcdefgh";
   ch = *(niz1 + 3);

v ch je 4. znak iz niza1.


Drži.
Sedaj lahko z
Koda:
Serial.println(ch);
ipišem četrti znak
Kako naj sedaj izpišem cel niz?

_________________
Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3361
Aktiv.: 14.18
Kraj: Dragomer

PrispevekObjavljeno: Čet Jan 28, 2016 3:14 pm    Naslov sporočila:   Odgovori s citatom

Mislim, da je dober dokument o pointersjih in arrayih.
Printam in berem.



http://moodle.bulme.at/pluginfile.php/82925/mod_resource/content/0/arduino/PointersInArduino.pdf#page=1&zoom=auto,-113,778

_________________
Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
rafaellsi
Član
Član



Pridružen-a: Ned 11 Sep 2011 18:54
Prispevkov: 479
Aktiv.: 2.86
Kraj: Radovljica

PrispevekObjavljeno: Čet Jan 28, 2016 5:04 pm    Naslov sporočila:   Odgovori s citatom

Sicer imam premalo znanja, ampak prvotno vptašanje se je nanašalo na razliko med tipom spremenljivk "string" - tabelo znakov in med objektom (razredom) tipa "String" - ampak verjetno avtor vprašanja ni imel tega v mislih). Za manipulacijo z objekti "String" obstajajo namenske funkcije za manipulacijo z njimi.

Za pomoč pri manipulaciji s stringi kot tabele znakov (kot je že zgoraj omenjeno) pa se pogosto uporabljajo kazalci.

V grobem bi bilo nekako takole:
Koda:

char str1[] = "To je string!";
char str2[14] = "To je string!";
Serial.print(str1);      //izpiše celoten string
Serial.print(str[5]);   //izpiše 6-ti znak stringa

char* niz[20] = {"To je tekst 2."};
char* nizkaz[] = {"To je tekst 0.", "To je tekst 1.", "To je tekst 2."};
Serial.println(niz[0]);     //izpiše prvi niz iz tabele nizov (tabela kazalcev na tabelo znakov)
Serial.print(nizkaz[1])     //izpiše drugi niz iz tabele nizov "nizkaz"
Serial.print(nizkaz[1][5])     //izpiše šesti znak iz drugega niza

[/url]
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3361
Aktiv.: 14.18
Kraj: Dragomer

PrispevekObjavljeno: Čet Jan 28, 2016 6:59 pm    Naslov sporočila:   Odgovori s citatom

Pravzaprav sem iskal namig, kako bi isti string enkrat obravnaval ko string (in ga prikazal z println z enim ukazom)
drugič pa bi znake tega istega stringa obravnaval kot znake z indeksom in tako v stringu kaj 'popravil'.

_________________
Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
S53DZ
Član
Član



Pridružen-a: Čet 28 Apr 2011 9:27
Prispevkov: 951
Aktiv.: 5.52
Kraj: Ljubljana

PrispevekObjavljeno: Čet Jan 28, 2016 7:07 pm    Naslov sporočila:   Odgovori s citatom

takole:
Koda:
   char niz1[20] = "pozdrav 123!";
   char niz2[20] = "111111111111";

   printf("\nPreizkus nizov v c-ju\n");
   strncpy(niz2, niz1, 4);
   *(niz2+7) = 0;
   //strcat(niz2, "\0");
   printf("\nNiz1 = %s", niz1);
   printf("\nNiz2 = %s\n", niz2);


Rezultat je Niz2 = "pozd111"
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3361
Aktiv.: 14.18
Kraj: Dragomer

PrispevekObjavljeno: Čet Jan 28, 2016 7:13 pm    Naslov sporočila:   Odgovori s citatom

Arduino ne prizna printf
samo print in println

Rad bi nekaj takega:

char niz1[20] = "pozdrav 123!";
in ukaz za print tega v celoti s println
nadalje bi recimo spremenil

niz1[10] = 'X';
in spet ukaz za print niza, ki bi imel spremenjen 10.ti bajt

_________________
Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
rafaellsi
Član
Član



Pridružen-a: Ned 11 Sep 2011 18:54
Prispevkov: 479
Aktiv.: 2.86
Kraj: Radovljica

PrispevekObjavljeno: Čet Jan 28, 2016 7:45 pm    Naslov sporočila:   Odgovori s citatom

Celoten niz ti enostavo izpiše, če v print ukaz enostavno vpišeš ime niza (kazalec na niz), npr. za zgornji primer:

Serial.print(niz1);
oz.
Serial.println(niz1);
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3361
Aktiv.: 14.18
Kraj: Dragomer

PrispevekObjavljeno: Čet Jan 28, 2016 7:51 pm    Naslov sporočila:   Odgovori s citatom

Hvala,

sem breze veze komplicial...

_________________
Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3361
Aktiv.: 14.18
Kraj: Dragomer

PrispevekObjavljeno: Pet Jan 29, 2016 7:42 am    Naslov sporočila:   Odgovori s citatom

Hja, nisem še na konju!

Po nasvetu lahko delam z nizi:
Koda:
      char tekst1[32] = "Nek tekst 1.";
      char tekst2[32] = "Dodatek";
      Serial.println(tekst1);
      Serial.println(tekst2i);
     

Ne morem pa oba niza združiti:
Koda:
tekst1 = tekst1 + tekst2;
To ne gre.

Gre pa, če ju definiram kot String:
Koda:
      String prvi = "Nek tekst 1. ";
      String drugi = "Dodatek." ;     
      prvi = prvi + drugi  ;
      Serial.println(prvi);


Prvi način mi omogoča obravnavo posameznih znakov v nizu recimo:
Koda:
Tekst1[5] = 'X';

Drugi način mi omogoča seštevanje celih nizov.
Koda:
prvi = prvi + drugi  ;


Kako bi dosegel to, da bi na istem nizu imel možnost tako obravnavo po prvem in drugem načinu

_________________
Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
chaos
Član
Član



Pridružen-a: Sob 16 Sep 2006 22:12
Prispevkov: 1063
Aktiv.: 4.66
Kraj: Zagorje ob Savi

PrispevekObjavljeno: Pet Jan 29, 2016 3:15 pm    Naslov sporočila:   Odgovori s citatom

Tudi v string objektu lahko dostopas do posameznih znakov z [] operatorjem. Poleg tega lahko do reprezentacije niza v stringu dostopas z razredno funkcijo c_str():
Koda:

string s1 = "ABCD";
string s2 = "EFGH";
string s3 = s1 + s2;
char c3 = s3[0];
const char* c3_ptr = s3.c_str();


LP!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3361
Aktiv.: 14.18
Kraj: Dragomer

PrispevekObjavljeno: Pet Jan 29, 2016 4:44 pm    Naslov sporočila:   Odgovori s citatom

Teko bo pa najbrž šlo:

Koda:
     // definiram string in sestavim njegovo vsebino:
      String tekst2  = "$,Dodatek,*";
      tekst2 = tekst2 + "Abefabedommine,*";
      Serial.println(tekst2);

      // Definiram array of char
      char tekst1[32] ;

      // Izračunam potrebno dolžino za konverzijo 
      int str_len = tekst2.length() + 1;
      // konvertiram z toCharArray funkcijo tekst2 v tekst1
      tekst2.toCharArray(tekst1, str_len);
      Serial.println(tekst1);


Sedaj moram najti samo še funkcijo za obratno konverzijo ..

_________________
Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
chaos
Član
Član



Pridružen-a: Sob 16 Sep 2006 22:12
Prispevkov: 1063
Aktiv.: 4.66
Kraj: Zagorje ob Savi

PrispevekObjavljeno: Pet Jan 29, 2016 5:18 pm    Naslov sporočila:   Odgovori s citatom

Ce noces non-stop konvertirati (in porabljati dvakrat pomnilnik), imej niz skoz v string objektu.

Konverzije se pa da delati tako:
Koda:

// iz char* v string
char* niz1 = "ABCD";
string niz2 = string(niz1);
// iz string v char*
string niz3 = "ABCD";
char* niz4 = niz3.c_str(); // ta pointer je veljaven samo dokler niz3 ni spremenjen!


LP!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran 1, 2  Naslednja
Stran 1 od 2

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 495 dni


Powered by phpBB © 2001, 2005 phpBB Group