C'de String'ler: C'de String Değişkenleri Nasıl Bildirilir ve Başlatılır

C'de Dize Nedir?

A C'deki dize doğrusal bir dizideki karakterlerin bir koleksiyonundan başka bir şey değildir. 'C', boşluklar içerse bile bir dizeyi her zaman tek bir veri olarak ele alır. Tek bir karakter, tek tırnak işareti gösterimi kullanılarak tanımlanır. Bir dize, çift tırnak işareti kullanılarak gösterilir.

Example, "Welcome to the world of programming!"

'C' standart kütüphane sağlar C'deki String'ler üzerinde karmaşık işlemleri kolayca gerçekleştirmek için kullanılabilecek birçok işlevi içerir.

C'de String Nasıl Bildirilir?

AC String, veri türü olarak char içeren basit bir dizidir. 'C dili dizeyi veri türü olarak doğrudan desteklemez. Bu nedenle, C'de bir String görüntülemek için bir karakter dizisinden yararlanmanız gerekir.

C'de bir değişkeni String olarak bildirmenin genel sözdizimi aşağıdaki gibidir:

char string_variable_name [array_size];

Stringlerin klasik deklarasyonu şu şekilde yapılabilir:

 char string_name[string_length] = "string";

Bir C String değişkeni bildirilirken dizinin boyutu tanımlanmalıdır çünkü C'deki string değişkeninde kaç karakterin saklanacağını hesaplamak için kullanılır. String bildiriminin bazı geçerli örnekleri aşağıdaki gibidir:

char first_name[15];    //declaration of a string variable
char last_name[15];

Yukarıdaki örnek, dizi boyutu 15 olan dize değişkenlerini temsil etmektedir. Bu, verilen C dizesi dizisinin en fazla 15 karakter tutabildiği anlamına gelir. Dizinin indekslenmesi 0'dan başlar, dolayısıyla karakterleri 0-14 konumundan saklar. C derleyicisi, oluşturulan karakter dizisine otomatik olarak bir NULL karakteri '\0' ekler.

C'de bir String nasıl başlatılır?

C'de String başlatmayı inceleyelim. Aşağıdaki örnek, C'de String'lerin başlatılmasını göstermektedir.

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*/

Dize3'te NULL karakterinin açıkça eklenmesi gerekir ve karakterler tek tırnak işaretleri içine alınır.

'C' ayrıca bir başlangıç ​​değeri oluşturmamıza da olanak tanır dize değişkeni karakter dizisinin boyutunu tanımlamadan. Aşağıdaki şekilde yapılabilir,

char first_name[ ] = "NATHAN";

C'deki Strings'in adı bir işaretçi görevi görür çünkü temelde bir dizidir.

C String Girişi: String Okumak için C Programı

Kullanıcıdan girdi isteyen etkileşimli programlar yazarken C, kullanıcıdan girilen bir metin satırını bulmak için scanf(), get() ve fgets() işlevlerini sağlar.

Okumak için scanf() kullandığımızda, dizi adı işaretçi görevi gördüğü için değişken adresine erişmek için “&” işaretini kullanmadan “%s” format belirticisini kullanırız.
Örneğin:

#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);
}

Çıktı:

Enter your first name and age:
John_Smith 48

scanf işlevindeki sorun, C'deki String'lerin tamamını hiçbir zaman okumamasıdır. Boşluk, form besleme, dikey sekme, yeni satır veya satırbaşı oluştuğunda okuma işlemini durduracaktır. Diyelim ki girdiyi “Guru99 Öğreticileri” olarak verdik ve iki isim arasında bir boşluk karakteri oluştuğundan scanf işlevi hiçbir zaman bir dizenin tamamını okumayacaktır. Scanf işlevi yalnızca okuyacaktır Guru99.

Boşluk içeren bir dizeyi okumak için get() fonksiyonunu kullanırız. Gets boşlukları yok sayar. O durur

yeni satıra ulaşıldığında okuma (Enter tuşuna basıldığında).

Örneğin:

#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;
}

Çıktı:

Enter your full name: Dennis Ritchie
My full name is Dennis Ritchie

Gets() işlevinin bir başka güvenli alternatifi, belirli sayıda karakteri okuyan fgets() işlevidir.
Örneğin:

#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;}

Çıktı:

Enter your name plz: Carlos
My name is Carlos

fgets() argümanları şunlardır:

  • dize adı,
  • Okunacak karakter sayısı,
  • stdin, klavye olan standart girişten okumak anlamına gelir.

C String Çıkışı: Bir String Yazdırmak için C programı

Standart printf işlevi, bir çıktı aygıtında C dilindeki Dizeleri yazdırmak veya görüntülemek için kullanılır. Kullanılan format belirtici: %s

Örnek,

printf("%s", name);

Dize çıktısı fputs() ve printf() işlevleriyle yapılır.

fputs() işlevi

fputs(), dizenin adına ve metni görüntülemek istediğiniz yeri gösteren bir işaretçiye ihtiyaç duyar. Ekrana yazdırmak için standart çıktıyı ifade eden stdout'u kullanıyoruz.
Örneğin:

#include <stdio.h>
int main()
{char town[40];
  printf("Enter your town: ");
  gets(town);
  fputs(town, stdout);
  return 0;}

Çıktı:

Enter your town: New York
New York

işlevi koyar

Puts fonksiyonu, C'de bir çıktı aygıtına dizge yazdırmak ve imleci ilk konuma geri taşımak için kullanılır. Bir puts fonksiyonu aşağıdaki şekilde kullanılabilir:

#include <stdio.h>
int main() {
char name[15];
gets(name);        //reads a string
puts(name);        //displays a string
return 0;}

Bu işlevin sözdizimi diğer işlevlere göre nispeten basittir.

Dize kitaplığı

Standart 'C' kütüphanesi, bir program içindeki dizeleri işlemek için çeşitli işlevler sağlar. Bu işlevlere dize işleyicileri de denir. Tüm bu işleyiciler içeride mevcut başlık dosyası.

işlev Amaç
strlen() Bu fonksiyon bir stringin uzunluğunu bulmak için kullanılır. Bir dizede NULL karakteri dışında kaç karakter bulunduğunu döndürür.
strcat(str1, str2) Bu fonksiyon iki stringi birleştirerek tek bir string oluşturmak için kullanılır. str2'yi str1'in sonuna ekler veya birleştirir ve str1'e bir işaretçi döndürür.
strcmp(str1, str2) Bu fonksiyon iki stringi birbiriyle karşılaştırmak için kullanılır. str0, str1'ye eşitse 2 değerini, str0 < str1 ise 2'dan küçükse ve str0 > str1 ise 2'dan büyük değerini döndürür.

Dize kitaplığı işlevlerini gösteren aşağıdaki programı ele alalım:

#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;
}

Çıktı:

Strings are not equal
Concatenated string:Hello World!
Length of first string:12
Length of second string:7
Copied string is:Hello World!

Diğer önemli kütüphane işlevleri şunlardır:

  • strncmp(str1, str2, n) : str0'in ilk n karakteri str1'nin ilk n karakterine eşitse 2, str0 < str1 ise 2'dan küçük ve str0 > str1 ise 2'dan büyükse XNUMX değerini döndürür.
  • strncpy(str1, str2, n) Bu fonksiyon başka bir dizeden bir dize kopyalamak için kullanılır. str2'nin ilk n karakterini str1'e kopyalar
  • strchr(str1, c): str1'de c karakterinin ilk geçtiği yere bir işaretçi döndürür veya karakter bulunamazsa NULL döndürür.
  • strrchr(str1, c): str1'i ters yönde arar ve str1'deki c karakterinin konumuna bir işaretçi döndürür veya karakter bulunamazsa NULL döndürür.
  • strstr(str1, str2): str2'de str1'nin ilk geçtiği yere bir işaretçi döndürür veya str2 bulunamazsa NULL döndürür.
  • strncat(str1, str2, n) str2'nin ilk n karakterini str1'in sonuna ekler (birleştirir) ve str1'e bir işaretçi döndürür.
  • strlwr() : dizeyi küçük harfe dönüştürmek için
  • strupr() : dizeyi büyük harfe dönüştürmek için
  • strrev() : dizeyi tersine çevirmek için

Bir String'i Sayıya Dönüştürme

C programlamada, çalışma zamanı hatasını önlemek için sayısal karakterlerden oluşan bir dizeyi sayısal bir değere dönüştürebiliriz. stdio.h kütüphanesi, bir dizeyi sayıya dönüştürmek için aşağıdaki işlevleri içerir:

  • int atoi(str) ASCII'den tam sayıya geçiş anlamına gelir; str'yi eşdeğer int değerine dönüştürür. İlk karakter sayı değilse veya herhangi bir sayıyla karşılaşılmazsa 0 döndürülür.
  • double atof(str) ASCII'den float'a çevirir, str'yi eşdeğer double değerine dönüştürür. İlk karakter sayı değilse veya hiç sayı bulunamazsa 0.0 döndürülür.
  • long int atol(str) ASCII'yi long int'ye çevirir, str'yi eşdeğer uzun tamsayı değerine dönüştürür. İlk karakter sayı değilse veya herhangi bir sayıyla karşılaşılmazsa 0 döndürülür.

Aşağıdaki program atoi() fonksiyonunu göstermektedir:

#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;}

Çıktı:

Enter a number: 221348
you enter 221348
  • char *string = “language” gibi bir dize işaretçisi bildirimi bir sabittir ve değiştirilemez.

ÖZET

  • Bir dize, bir karakter dizisinde saklanan bir karakter dizisidir.
  • Dize, çift tırnak işareti içine alınmış bir metindir.
  • 'd' gibi bir karakter bir dize değildir ve tek tırnak işaretleri ile gösterilir.
  • 'C', bir programdaki dizeleri işlemek için standart kitaplık işlevleri sağlar. Dize manipülatörleri içinde saklanır başlık dosyası.
  • Bir dizenin bir programda kullanılmadan önce bildirilmesi veya başlatılması gerekir.
  • Farklı giriş ve çıkış dizesi işlevleri vardır ve bunların her birinin kendine has özellikleri vardır.
  • İşlevleriyle çalışmak için dize kitaplığını eklemeyi unutmayın
  • Kodlama ve kod çözme işlemleri için çok yararlı olan atoi(), atof() ve atol() aracılığıyla dizeyi sayıya dönüştürebiliriz.
  • C'de bir dizi dizi tanımlayarak farklı dizeleri işleyebiliriz.