Merkkijonot C:ssä: merkkijonomuuttujien ilmoittaminen ja alustaminen C:ssä
Mikä on merkkijono C:ssä?
A Jousi C:ssä on vain kokoelma merkkejä lineaarisessa järjestyksessä. 'C' käsittelee merkkijonoa aina yksittäisenä datana, vaikka se sisältää välilyöntejä. Yksi merkki määritellään käyttämällä yhden lainausmerkin esitystä. Merkkijono esitetään lainausmerkeillä.
Example, "Welcome to the world of programming!"
"C" tarjoaa vakiokirjaston joka sisältää monia toimintoja, joita voidaan käyttää monimutkaisten toimintojen suorittamiseen helposti C:n merkkijonoilla.
Kuinka ilmoittaa merkkijono C:ssä?
AC String on yksinkertainen taulukko, jonka tietotyyppinä on char. C-kieli ei suoraan tue merkkijonoa tietotyyppinä. Siksi merkkijonon näyttämiseksi C:ssä sinun on käytettävä merkkijonoa.
Yleinen syntaksi muuttujan ilmoittamiseksi merkkijonoksi C:ssä on seuraava:
char string_variable_name [array_size];
Klassinen merkkijonojen ilmoitus voidaan tehdä seuraavasti:
char string_name[string_length] = "string";
Taulukon koko on määritettävä määritettäessä C-merkkijonomuuttujaa, koska sitä käytetään laskemaan, kuinka monta merkkiä C-merkkijonomuuttujan sisään tallennetaan. Joitakin kelvollisia esimerkkejä merkkijonomäärityksestä ovat seuraavat:
char first_name[15]; //declaration of a string variable char last_name[15];
Yllä oleva esimerkki edustaa merkkijonomuuttujia, joiden taulukkokoko on 15. Tämä tarkoittaa, että annettuun C-merkkijonotaulukkoon mahtuu enintään 15 merkkiä. Taulukon indeksointi alkaa 0:sta, joten se tallentaa merkit 0-14 paikasta. C-kääntäjä lisää automaattisesti NULL-merkin \0 luotuun merkkijonoon.
Kuinka alustaa merkkijono C:ssä?
Tutkitaan merkkijonojen alustusta C:ssä. Seuraava esimerkki osoittaa merkkijonojen alustuksen C:ssä,
char first_name[15] = "ANTHONY";
char first_name[15] = {'A','N','T','H','O','N','Y','\0'}; // NULL character '\0' is required at end in this declaration
char string1 [6] = "hello";/* string size = 'h'+'e'+'l'+'l'+'o'+"NULL" = 6 */
char string2 [ ] = "world"; /* string size = 'w'+'o'+'r'+'l'+'d'+"NULL" = 6 */
char string3[6] = {'h', 'e', 'l', 'l', 'o', '\0'} ; /*Declaration as set of characters ,Size 6*/
Merkkijono3:ssa NULL-merkki on lisättävä eksplisiittisesti, ja merkit on suljettu lainausmerkkeihin.
'C' mahdollistaa myös a:n alustamisen merkkijonomuuttuja määrittelemättä merkkijonon kokoa. Se voidaan tehdä seuraavalla tavalla,
char first_name[ ] = "NATHAN";
C:n merkkijonojen nimi toimii osoittimena, koska se on pohjimmiltaan taulukko.
C-merkkijono: C Ohjelma lukemaan merkkijonoa
Kun kirjoitetaan interaktiivisia ohjelmia, jotka pyytävät käyttäjää syöttämään, C tarjoaa funktiot scanf(), gets() ja fgets() löytääkseen käyttäjän kirjoittaman tekstirivin.
Kun käytämme lukemiseen scanf()-komentoa, käytämme "%s"-muodon määritteen käyttämättä "&"-merkkiä muuttujan osoitteen käyttämiseen, koska taulukon nimi toimii osoittimena.
Esimerkiksi:
#include <stdio.h>
int main() {
char name[10];
int age;
printf("Enter your first name and age: \n");
scanf("%s %d", name, &age);
printf("You entered: %s %d",name,age);
}
lähtö:
Enter your first name and age: John_Smith 48
Ongelmana scanf-funktion kanssa on, että se ei koskaan lue kokonaisia merkkijonoja C-kielellä. Se pysäyttää lukemisen heti, kun tapahtuu välilyönti, lomakkeensyöttö, pystysuora sarkain, rivinvaihto tai rivinvaihto. Oletetaan, että annamme syötteen muodossa "Guru99 Tutorials”, scanf-funktio ei koskaan lue koko merkkijonoa, koska nimien välissä on välilyönti. scanf-funktio lukee vain Guru99.
Jotta voimme lukea merkkijonon, joka sisältää välilyöntejä, käytämme gets()-funktiota. Gets jättää välilyönnit huomioimatta. Se pysähtyy
lukeminen, kun rivinvaihto saavutetaan (Painataan Enter-näppäintä).
Esimerkiksi:
#include <stdio.h>
int main() {
char full_name[25];
printf("Enter your full name: ");
gets(full_name);
printf("My full name is %s ",full_name);
return 0;
}
lähtö:
Enter your full name: Dennis Ritchie My full name is Dennis Ritchie
Toinen turvallisempi vaihtoehto gets():lle on fgets()-funktio, joka lukee tietyn määrän merkkejä.
Esimerkiksi:
#include <stdio.h>
int main() {
char name[10];
printf("Enter your name plz: ");
fgets(name, 10, stdin);
printf("My name is %s ",name);
return 0;}
lähtö:
Enter your name plz: Carlos My name is Carlos
Fgets()-argumentit ovat:
- merkkijonon nimi,
- luettavien merkkien määrä,
- stdin tarkoittaa lukemista vakiosyötteestä, joka on näppäimistö.
C-merkkijonotulostus: C-ohjelma merkkijonon tulostamiseen
Vakioprintf-toimintoa käytetään merkkijonojen tulostamiseen tai näyttämiseen C-muodossa tulostuslaitteella. Käytetty muotomääritys on %s
esimerkiksi,
printf("%s", name);
Merkkijonotulostus tehdään fputs()- ja printf()-funktioilla.
fputs()-funktio
Fputs() tarvitsee merkkijonon nimen ja osoittimen, johon haluat näyttää tekstin. Käytämme stdout-muotoa, joka viittaa vakiotulostukseen, jotta voimme tulostaa näytölle.
Esimerkiksi:
#include <stdio.h>
int main()
{char town[40];
printf("Enter your town: ");
gets(town);
fputs(town, stdout);
return 0;}
lähtö:
Enter your town: New York New York
laittaa toiminnon
Puts-toimintoa käytetään tulostamaan merkkijono C-kielellä tulostuslaitteella ja siirtämään kohdistinta takaisin ensimmäiseen paikkaan. Puts-funktiota voidaan käyttää seuraavalla tavalla:
#include <stdio.h>
int main() {
char name[15];
gets(name); //reads a string
puts(name); //displays a string
return 0;}
Tämän funktion syntaksi on suhteellisen yksinkertainen kuin muiden funktioiden.
merkkijonokirjasto
Tavallinen C-kirjasto tarjoaa erilaisia toimintoja ohjelman merkkijonojen käsittelyyn. Näitä toimintoja kutsutaan myös merkkijonokäsittelijöiksi. Kaikki nämä käsittelijät ovat sisällä otsikkotiedosto.
| Toiminto | Tarkoitus |
|---|---|
| strlen() | Tätä toimintoa käytetään merkkijonon pituuden etsimiseen. Se palauttaa, kuinka monta merkkiä merkkijonossa on NULL-merkkiä lukuun ottamatta. |
| strcat(str1, str2) | Tätä toimintoa käytetään kahden merkkijonon yhdistämiseen yhdeksi merkkijonoksi. Se liittää tai ketjuttaa str2:n str1:n loppuun ja palauttaa osoittimen str1:een. |
| strcmp(str1, str2) | Tätä toimintoa käytetään kahden merkkijonon vertaamiseen keskenään. Se palauttaa arvon 0, jos str1 on yhtä suuri kuin str2, pienempi kuin 0, jos str1 < str2, ja suurempi kuin 0, jos str1 > str2. |
Tarkastellaan alla olevaa ohjelmaa, joka esittelee merkkijonokirjaston toimintoja:
#include <stdio.h>
#include <string.h>
int main () {
//string initialization
char string1[15]="Hello";
char string2[15]=" World!";
char string3[15];
int val;
//string comparison
val= strcmp(string1,string2);
if(val==0){
printf("Strings are equal\n");
}
else{
printf("Strings are not equal\n");
}
//string concatenation
printf("Concatenated string:%s",strcat(string1,string2)); //string1 contains hello world!
//string length
printf("\nLength of first string:%d",strlen(string1));
printf("\nLength of second string:%d",strlen(string2));
//string copy
printf("\nCopied string is:%s\n",strcpy(string3,string1)); //string1 is copied into string3
return 0;
}
lähtö:
Strings are not equal Concatenated string:Hello World! Length of first string:12 Length of second string:7 Copied string is:Hello World!
Muita tärkeitä kirjaston toimintoja ovat:
- strncmp(str1, str2, n) : se palauttaa 0:n, jos str1:n ensimmäiset n merkkiä ovat yhtä kuin str2:n ensimmäiset n merkkiä, pienempi kuin 0, jos str1 < str2, ja suurempi kuin 0, jos str1 > str2.
- strncpy(str1, str2, n) Tätä funktiota käytetään kopioimaan merkkijono toisesta merkkijonosta. Kopioi str2:n ensimmäiset n merkkiä merkkijonoon str1
- strchr(str1, c): se palauttaa osoittimen merkin c ensimmäiseen esiintymiseen str1:ssä tai NULL, jos merkkiä ei löydy.
- strrchr(str1, c): se etsii merkkijonoa käänteisesti ja palauttaa osoittimen merkin c kohtaan str1:ssä tai NULL, jos merkkiä ei löydy.
- strstr(str1, str2): se palauttaa osoittimen str2:n ensimmäiseen esiintymiseen str1:ssä tai NULL, jos str2:ta ei löydy.
- strncat(str1, str2, n) Liittää (ketjuttaa) str2:n ensimmäiset n merkkiä str1:n loppuun ja palauttaa osoittimen str1:een.
- strlwr() : muuttaa merkkijonon pieniksi kirjaimille
- strupr() : muuntaa merkkijonon isoiksi kirjaimiksi
- strrev() : kääntää merkkijonon
Merkkijonon muuntaminen numeroksi
C-ohjelmoinnissa voimme muuntaa numeeristen merkkien merkkijonon numeerisiksi arvoiksi ajonaikaisen virheen estämiseksi. Kirjasto stdio.h sisältää seuraavat toiminnot merkkijonon muuntamiseksi numeroksi:
- int atoi(str) tarkoittaa ASCII:tä kokonaislukuna; se muuntaa str:n vastaavaksi int-arvoksi. 0 palautetaan, jos ensimmäinen merkki ei ole numero tai numeroita ei löydy.
- double atof(str) tarkoittaa ASCII:n kellumista, se muuntaa str:n vastaavaksi kaksoisarvoksi. 0.0 palautetaan, jos ensimmäinen merkki ei ole numero tai numeroita ei löydy.
- long int atol(str) tarkoittaa ASCII:tä long int:ksi. Muuntaa str:n vastaavaksi pitkäksi kokonaislukuarvoksi. 0 palautetaan, jos ensimmäinen merkki ei ole numero tai numeroita ei löydy.
Seuraava ohjelma esittelee atoi()-funktion:
#include <stdio.h>
int main()
{char *string_id[10];
int ID;
printf("Enter a number: ");
gets(string_id);
ID = atoi(string_id);
printf("you enter %d ",ID);
return 0;}
lähtö:
Enter a number: 221348 you enter 221348
- Merkkijonoosoittimen ilmoitus, kuten char *string = "kieli" on vakio, eikä sitä voi muokata.
Yhteenveto
- Merkkijono on merkkijonoon tallennettu merkkijono.
- Merkkijono on lainausmerkkien sisällä oleva teksti.
- Merkki, kuten 'd', ei ole merkkijono, ja se ilmaistaan yksittäisillä lainausmerkeillä.
- "C" tarjoaa vakiokirjastotoimintoja ohjelman merkkijonojen käsittelemiseen. Merkkijonomanipulaattorit on tallennettu otsikkotiedosto.
- Merkkijono on ilmoitettava tai alustettava ennen sen käyttöä ohjelmassa.
- On olemassa erilaisia syöttö- ja lähtömerkkijonotoimintoja, joista jokaisella on omat ominaisuutensa.
- Älä unohda sisällyttää merkkijonokirjastoa toimiaksesi sen toimintojen kanssa
- Voimme muuntaa merkkijonon numeroiksi atoi(), atof()- ja atol()-funktioiden avulla, jotka ovat erittäin hyödyllisiä koodaus- ja dekoodausprosesseissa.
- Voimme käsitellä erilaisia merkkijonoja määrittämällä merkkijonojoukon C:ssä.
