Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3361 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Čet Jan 28, 2016 10:53 am Naslov sporočila: string vsv array of char |
|
|
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 |
|
 |
vpeter Član

Pridružen-a: Pon 11 Jun 2012 16:05 Prispevkov: 369 Aktiv.: 2.33 Kraj: Maribor okolica
|
Objavljeno: Čet Jan 28, 2016 1:04 pm Naslov sporočila: |
|
|
To je polje 20 kazalcev na char in ne pointer na array of char. |
|
Nazaj na vrh |
|
 |
S53DZ Član



Pridružen-a: Čet 28 Apr 2011 9:27 Prispevkov: 951 Aktiv.: 5.52 Kraj: Ljubljana
|
Objavljeno: Čet Jan 28, 2016 1:35 pm Naslov sporočila: |
|
|
Morda iščeš tole:
Koda: |
char niz1[20] = "abcdefgh";
ch = *(niz1 + 3);
|
v ch je 4. znak iz niza1. |
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3361 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Čet Jan 28, 2016 2:05 pm Naslov sporočila: |
|
|
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 |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3361 Aktiv.: 14.18 Kraj: Dragomer
|
|
Nazaj na vrh |
|
 |
rafaellsi Član


Pridružen-a: Ned 11 Sep 2011 18:54 Prispevkov: 479 Aktiv.: 2.86 Kraj: Radovljica
|
Objavljeno: Čet Jan 28, 2016 5:04 pm Naslov sporočila: |
|
|
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 |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3361 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Čet Jan 28, 2016 6:59 pm Naslov sporočila: |
|
|
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 |
|
 |
S53DZ Član



Pridružen-a: Čet 28 Apr 2011 9:27 Prispevkov: 951 Aktiv.: 5.52 Kraj: Ljubljana
|
Objavljeno: Čet Jan 28, 2016 7:07 pm Naslov sporočila: |
|
|
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 |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3361 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Čet Jan 28, 2016 7:13 pm Naslov sporočila: |
|
|
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 |
|
 |
rafaellsi Član


Pridružen-a: Ned 11 Sep 2011 18:54 Prispevkov: 479 Aktiv.: 2.86 Kraj: Radovljica
|
Objavljeno: Čet Jan 28, 2016 7:45 pm Naslov sporočila: |
|
|
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 |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3361 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Čet Jan 28, 2016 7:51 pm Naslov sporočila: |
|
|
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 |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3361 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Pet Jan 29, 2016 7:42 am Naslov sporočila: |
|
|
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:
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 |
|
 |
chaos Član


Pridružen-a: Sob 16 Sep 2006 22:12 Prispevkov: 1063 Aktiv.: 4.66 Kraj: Zagorje ob Savi
|
Objavljeno: Pet Jan 29, 2016 3:15 pm Naslov sporočila: |
|
|
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 |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3361 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Pet Jan 29, 2016 4:44 pm Naslov sporočila: |
|
|
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 |
|
 |
chaos Član


Pridružen-a: Sob 16 Sep 2006 22:12 Prispevkov: 1063 Aktiv.: 4.66 Kraj: Zagorje ob Savi
|
Objavljeno: Pet Jan 29, 2016 5:18 pm Naslov sporočila: |
|
|
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 |
|
 |
|