C'de Dize nedir?
Bir C dize şey ama doğrusal bir dizisindeki karakter topluluğudur. 'C', beyaz boşluklar içerse bile bir dizgeye her zaman tek bir veri muamelesi yapar. Tek bir karakter, tek tırnak gösterimi kullanılarak tanımlanır. Bir dize, çift tırnak işaretleri kullanılarak temsil edilir.
Example, "Welcome to the world of programming!"
'C', C'deki Dizeler üzerinde karmaşık işlemleri kolayca gerçekleştirmek için kullanılabilecek birçok işlevi içeren
Bu eğitimde öğreneceksiniz-
- C'de Bir Dize Nasıl Bildirilir ve Başlatılır
- Dize Girişi: Bir Dize Oku
- Dize Çıktısı: Bir Dizeyi Yazdır / Göster
- fputs () işlevi
- işlev koyar
- Dize kitaplığı
- Bir Dizeyi Sayıya Dönüştürme
C'de Bir Dize Nasıl Bildirilir ve Başlatılır
AC String, veri türü olarak char içeren basit bir dizidir. 'C' dili, veri türü olarak dizeyi doğrudan desteklemez. Bu nedenle, C'de bir String görüntülemek için bir karakter dizisi kullanmanız gerekir.
Bir değişkeni C'de Dize olarak bildirmek için genel sözdizimi aşağıdaki gibidir:
char string_variable_name [array_size];
Dizelerin klasik Bildirimi şu şekilde yapılabilir:
char string_name[string_length] = "string";
Bir dizinin boyutu, bir C String değişkeni bildirilirken tanımlanmalıdır çünkü C'deki dize değişkeninin içinde kaç karakterin saklanacağını hesaplamak için kullanılır. Dize bildiriminin bazı geçerli örnekleri aşağıdaki gibidir:
char first_name[15]; //declaration of a string variablechar last_name[15];
Yukarıdaki örnek, dizi boyutu 15 olan dize değişkenlerini temsil eder. Bu, verilen C dizesi dizisinin en fazla 15 karakter tutabildiği anlamına gelir. Dizinin indekslenmesi 0'dan başlar, bu nedenle 0-14 pozisyonundaki karakterleri saklayacaktır. C derleyicisi, oluşturulan karakter dizisine otomatik olarak bir NULL karakteri '\ 0' ekler.
C'deki String başlatmayı inceleyelim. Aşağıdaki örnek, C'deki Strings'in başlatılmasını gösterir,
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 declarationchar 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 karakter açıkça eklenmelidir ve karakterler tek tırnak işareti içine alınır.
'C' ayrıca karakter dizisinin boyutunu tanımlamadan bir dize değişkenini başlatmamıza izin verir. Şu şekilde yapılabilir,
char first_name[ ] = "NATHAN";
C'deki Dizelerin adı, temelde bir dizi olduğu için bir işaretçi görevi görür.
Dize Girişi: Bir Dize Oku
Kullanıcıdan girdi isteyen etkileşimli programlar yazarken, C, kullanıcıdan girilen bir metin satırını bulmak için scanf (), gets () ve fgets () işlevlerini sağlar.
Okumak için scanf () kullandığımızda, değişken adresine erişmek için "&" kullanmadan "% s" biçim belirticisini kullanırız çünkü bir dizi adı bir işaretçi olarak işlev görür. Örneğin:
#includeint 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şleviyle ilgili sorun, C'deki dizelerin tamamını okumamasıdır. Beyaz boşluk, form beslemesi, dikey sekme, satırsonu veya satır başı oluştuğunda okuma işlemini durduracaktır. "Guru99 Tutorials" olarak girdi verdiğimizi varsayalım, sonra scanf işlevi iki isim arasında bir boşluk karakteri oluştuğundan hiçbir zaman tüm dizeyi okumayacaktır. Scanf işlevi yalnızca Guru99'u okuyacaktır.
Boşluk içeren bir dizeyi okumak için gets () işlevini kullanıyoruz. Gets, beyaz boşlukları yok sayar. Yeni bir satıra ulaşıldığında okumayı durdurur (Enter tuşuna basıldığında).
#includeint 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 RitchieMy full name is Dennis Ritchie
Gets () 'a bir başka güvenli alternatif, belirli sayıda karakteri okuyan fgets () işlevidir. Örneğin:
#includeint 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: CarlosMy name is Carlos
Fgets () argümanları şunlardır:
- dize adı,
- okunacak karakter sayısı,
- stdin, klavye olan standart girişten okumak anlamına gelir.
Dize Çıktısı: Bir Dizeyi Yazdır / Göster
Standart printf işlevi, bir çıktı aygıtında C'deki Dizeleri yazdırmak veya görüntülemek için kullanılır. Kullanılan biçim belirticisi% s
Misal,
printf("%s", name);
Dizge çı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 yere işaret eden bir işaretçiye ihtiyaç duyar. Ekrana yazdırmak için standart çıktıyı ifade eden stdout kullanıyoruz. Örneğin:
#includeint main(){char town[40];printf("Enter your town: ");gets(town);fputs(town, stdout);return 0;}
Çıktı:
Enter your town: New YorkNew York
işlev koyar
Puts işlevi, bir çıktı aygıtında C dizgesini yazdırmak ve imleci ilk konuma geri taşımak için kullanılır. Puts işlevi şu şekilde kullanılabilir:
#includeint main() {char name[15];gets(name); //reads a stringputs(name); //displays a stringreturn 0;}
Bu işlevin sözdizimi, diğer işlevlerden nispeten basittir.
Dize kitaplığı
Standart 'C' kitaplığı, bir program içindeki dizeleri değiştirmek için çeşitli işlevler sağlar. Bu işlevler aynı zamanda dizi işleyicileri olarak da adlandırılır. Tüm bu işleyiciler
Fonksiyon | Amaç |
strlen () | Bu işlev, bir dizginin uzunluğunu bulmak için kullanılır. NULL karakteri hariç bir dizede kaç karakter olduğunu döndürür. |
strcat (str1; str2) | Bu işlev, iki dizgiyi tek bir dizge oluşturmak üzere birleştirmek için kullanılır. Str2'yi str1'in sonuna ekler veya bitiştirir ve str1'e bir gösterici döndürür. |
strcmp (str1; str2) | Bu işlev, iki dizeyi birbiriyle karşılaştırmak için kullanılır. Str1, str2'ye eşitse 0, str1 |
Dize kitaplığı işlevlerini gösteren aşağıdaki programı ele alalım:
#include#include int main () {//string initializationchar string1[15]="Hello";char string2[15]=" World!";char string3[15];int val;//string comparisonval= strcmp(string1,string2);if(val==0){printf("Strings are equal\n");}else{printf("Strings are not equal\n");}//string concatenationprintf("Concatenated string:%s",strcat(string1,string2)); //string1 contains hello world!//string lengthprintf("\nLength of first string:%d",strlen(string1));printf("\nLength of second string:%d",strlen(string2));//string copyprintf("\nCopied string is:%s\n",strcpy(string3,string1)); //string1 is copied into string3return 0;}
Çıktı:
Strings are not equalConcatenated string:Hello World!Length of first string:12Length of second string:7Copied string is:Hello World!
Diğer önemli kütüphane işlevleri şunlardır:
- strncmp (str1, str2, n): str1'in ilk n karakteri, str2'nin ilk n karakterine eşitse 0 döndürür, str1
str2 ise 0'dan büyüktür. - strncpy (str1, str2, n) Bu işlev, bir dizgeyi başka bir dizeden kopyalamak için kullanılır. Str2'nin ilk n karakterini str1'e kopyalar
- strchr (str1, c): str1'de char c'nin ilk oluşumuna bir gösterici döndürür veya karakter bulunamazsa NULL döndürür.
- strrchr (str1, c): str1'i tersten arar ve str1'deki char c konumuna bir gösterici döndürür veya karakter bulunamazsa NULL döndürür.
- strstr (str1, str2): str1'deki str2'nin ilk oluşumuna bir gösterici 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 gösterici 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 Dizeyi Sayıya Dönüştürme
C programlamasında, bir çalışma zamanı hatasını önlemek için sayısal karakter dizisini sayısal bir değere dönüştürebiliriz. Stdio.h kitaplığı, bir dizeyi sayıya dönüştürmek için aşağıdaki işlevleri içerir:
- int atoi (str) ASCII'nin tamsayı anlamına gelir; str'yi eşdeğer int değerine dönüştürür. İlk karakter sayı değilse veya hiçbir sayı ile karşılaşılmazsa 0 döndürülür.
- double atof (str) ASCII'nin float olmasını ifade eder, str'yi eşdeğer double değere dönüştürür. İlk karakter bir sayı değilse veya hiçbir sayı ile karşılaşılmazsa 0,0 döndürülür.
- long int atol (str) ASCII'yi long int türüne dönüştürür, str'yi eşdeğer uzun tamsayı değerine dönüştürür. İlk karakter sayı değilse veya hiçbir sayı ile karşılaşılmazsa 0 döndürülür.
Aşağıdaki program atoi () işlevini göstermektedir:
#includeint 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: 221348you enter 221348
- Char * string = "dil" gibi bir dize işaretçisi bildirimi bir sabittir ve değiştirilemez.
Özet
- Bir dizge, 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şaretleriyle belirtilir.
- 'C', bir programdaki dizeleri işlemek için standart kütüphane işlevleri sağlar. Dize manipülatörleri
başlık dosyasında saklanır. - Bir dizge, bir programda kullanılmadan önce bildirilmeli veya başlatılmalıdır.
- Farklı girdi ve çıktı dizesi işlevleri vardır, bunların her biri kendi özelliklerine sahiptir.
- İşlevleriyle çalışmak için dize kitaplığını eklemeyi unutmayın.
- Atoi (), atof () ve atol () aracılığıyla dizeyi sayıya dönüştürebiliriz, bunlar kodlama ve kod çözme işlemleri için çok yararlıdır.
- C'de bir dizi dizge tanımlayarak farklı dizeleri işleyebiliriz.