80 likes | 238 Views
Simboliskā tipa mainīgie, simbolu virkne kā simbolu masīvs. Mērķis: jāmacas sradat ar simbolu masīviem. Uzdevumi: Apskatit strukturu simboliskos datu tipus Jāmacas izmantot iebūvētās funkcijas simbolu virkņu apstrādē ( virkņu salīdzināšana, apakšvirknes atdalīšana, simbolu virkņu kopēšana ).
E N D
Mērķis: jāmacas sradat ar simbolu masīviem Uzdevumi: • Apskatit strukturu simboliskos datu tipus • Jāmacas izmantot iebūvētāsfunkcijas simbolu virkņu apstrādē (virkņusalīdzināšana, apakšvirknes atdalīšana,simbolu virkņu kopēšana)
Simbolu virknes С stilā (char*) Simbolu virkne valodā С ir viendimensijas simbolu masīvs, kas beidzas ar nulles baitu '\0'. Piemēram: char s[8]="Borland“ glabājas atmiņā kā B|o|r|l|a|n|d|\0. Simbolu numerācija sākas ar nulli!
Darbam ar virknēm valodā C funkcijam • strlen(s) - virknes garums (simbolu skaits, neskaitot pedējo baitu '\0'). • strcpy(s1,s2) - virknes s2 kopēšana virknē s1 • strcat(s1,s2) - pievienot virkni s2 virknei s1; • strncat(s1,s2,n) - pievienot virknei s1 virknes s2 pirmos n simbolus; • atoi(s) - vesels skaitlis, kas ierakstīts virknē s (ANSIstring to int); • atof(s) - reāls skaitlis, kas ierakstīts virknē s (ANSIstring to float);
1.piemērs. Programma pieprasa simbolu virkni un paziņo, cik tajā ir lielo latīņu burtu. #include <iostream.h> int main() { char s[80]; int k,x; cout << "s="; gets(s) ; // s - simbolu virkne x=0; // x - lielo latīņu burtu skaits virknē s for(k=0; k<strlen(s); k++) if ((s[k]>='A')&&(s[k]<='Z')) x++; cout << "\n x=" << x; }
2. piemērs. Virknē s aizvietot visas jautājuma zīmes ar izsaukuma zīmēm. #include <iostream.h> int main() { char s[80]; int k; cout << "s="; gets(s); for (k=0; k<strlen(s); k++) if (s[k]=='?') s[k]='!'; cout << "\n s=" << s; }
3. piemērs.Cik vārdu ir virknē s? Blakus esošie vārdi ir atdalīti ar vienu tukšuma zīmi. #include <iostream.h> Int main() { char s[80]; int k,x; cout << "\n Enter a String: "; gets(s); // ievadīt virkni, kurā ir tukšuma zīmes (stdio.h) // Vispirms, ja virkne beidzas ar tukšuma zīmi (-ēm), iznīcināsim to: x=0; // x - tukšuma zīmju skaits virknē S for (k=0; k<strlen(s); k++) if (s[k]==' ') x++; cout << "\n x=" << x;// vārdu būs par 1 vairāk nekā tukšuma zīmju }
4. piemērs. Vai virknē S1 ir kaut viens fragments, kas ir vienāds ar virkni S2?. #include <iostream.h> int main() { char S1[80], S2[80], *s; cout << "\n S1="; gets(S1); // virkņu ievade cout << "\n S2="; gets(S2); s=strstr(S1,S2); // rādītājs uz S2 sākumu virknē S1 if (s) cout << "\n Yes"; // vai: if (s==0) cout << "\n No"; else cout << "\n No"; // else cout << "\n Yes"; }