C Proqramlaşdırmada Strings


SimBaxılıb 232

Sistem dizaynı ilə bağlı müsahibə sualları o qədər açıq ola bilər ki, düzgün hazırlaşmağı bilmək çox çətindir. İndi satın aldıqdan sonra Amazon, Microsoft və Adobe-nin dizayn dövrlərini sındıra bilirəm Bu kitabı. Gündəlik bir yenidən nəzərdən keçirin dizayn sualı və söz verirəm ki, dizayn dövrünü sındıra bilərsiniz.

C məlumat növlərində xarakter məlumat növünü öyrəndik. İçində bir simvol saxlayır və 1 bayt yer tutur. Bu, bir anda yalnız bir xarakterin istifadəsini dəstəkləyəcək. Ancaq heç bir proqram tək simvollarla bitməyəcək. Olacaq sözlər və cümlələr olacaq giriş və ya çıxış hər hansı bir proqramda. Məsələn, tələbə / işçi / şöbə / mağazalar / kitab adlarını qəbul edən və onu göstərən bir proqramı nəzərdən keçirin. Bu adlar bir və ya daha çox sözdən ibarət olacaq. C terminologiyasında biz onları strings adlandırırıq. Simvol məlumat növü bir anda yalnız bir xarakteri dəstəklədiyi üçün bu dəyərləri saxlamaq üçün bir xarakter dəyişənindən istifadə edə bilmərik. Bir sözü saxlamaq üçün birdən çox xarakter dəyişənini belə yarada bilmərik; üstəlik mümkün deyil. Beləliklə, simli dəyərləri saxlamaq üçün xarakter növləri olan bir sıra xüsusiyyətindən istifadə edirik.

C-də, simli dəyərləri saxlamaq üçün heç bir məlumat növümüz yoxdur. Daha çox simli dəyərləri saxlamaq üçün simvol massivlərindən istifadə edirik. Xarakter tipli bir dəyişən istifadə etdikdə, tərtibçi yalnız bir simvol saxlaya biləcəyini bilir. Ancaq simlər halında, bu sıra array elementindən asılıdır. Dizidəki elementlərin sayını əvvəlcədən təyin etmiş olsaq da, saxlayacağımız sətir massivdəki bütün elementləri tutmayacaqdır. Dizinin elementlərindən daha az sayda simvol ola bilər. Dizinin başlanğıc olunmamış üzvlərinin zibil dəyərlərinə sahib olacağını bilirik. Beləliklə, ipi daha qısa ölçülü çap etməyə çalışsaq, simli dəyərlə birlikdə zibil dəyərlərini də çap edə bilər. Bu zibil dəyərlərinin göstərilməməsi və ya hər hansı bir əməliyyatda istifadə edilməməsi üçün, simlin sonunu göstərmək üçün saxladığımız sətrin sonunda boş bir terminator əlavə edirik. Beləliklə, tərtibçi sətrin ucuna çatdığını və massivdə göstərilməsinə və ya keçilməsinə ehtiyac olmadığını biləcəkdir. Bu boş terminator '\ 0' ilə işarələnir. Ancaq bu sıfır terminator göstərilməyəcək və ya hər hansı bir simli manipulyasiya istifadə olunmayacaq. Bu yalnız sətrin / cümlənin sonu barədə tərtibçi üçün göstəricidir. 1 bayt yer tutur. Həmişə xatırlamaq lazımdır ki, simli uzunluq simli uzunluqdur + sıfır simvoldan 1 bayt.

Simli Bəyannamə

Hər hansı bir simli bir tip xarakterli və ya a göstərici simvollara (bu göstərici hissəsində müzakirə olunur). Beləliklə, hər hansı bir simli dəyişəni xarakter olaraq datatype ilə bir sıra elan edə bilərik.

chariot chrArr [10]; // 10 elementdən ibarət olan bir xarakter massividir
chariot chrName [15]; // adları 14 simvol + 1 bayt boş terminatorla saxlamağa imkan verir.
chariot * chrPtr; // simvol üçün bir göstəricidir. simli başlanğıc xarakterinə işarə edir

 

 

Simli başlatma

Bir simli dəyişən elan etdikdə (simvollar massivi) RAM-da yaddaş sahəsi yaradır. Dizidəki elementlərin sayını təyin etmişiksə, yaddaşda bu qədər bayt yer yaradacaqdır. Sətir üçün həqiqi dəyərlər simli dəyişəni başlatdıqda təyin olunur. Simli dəyişənlər müxtəlif yollarla başlana bilər:

Dəyişən elan edərkən

Simli dəyişənlər dəyişənin özü elan edilərkən başlanğıc edilə bilər. Bunu müxtəlif yollarla - massivin başlanğıc metodundan istifadə etməklə və ya birbaşa sətir dəyərini təyin etməklə etmək olar.

char chrString[15] = { 'S', 't', 'r', 'i', 'n', 'g' ' ', 'V', 'a', 'l', 'u', 'e', '\0'}; 
char chrString[] = { 'S', 't', 'r', 'i', 'n', 'g' ' ', 'V', 'a', 'l', 'u', 'e', '\0'}; // automatically calculates number of elements of array as 13
char chrString [] ="Example"; // this type of initialization does not take more than one word
char chrString [15] = "String Value"; // this can have more than one word in initialization value
char *chrPtr = "C String Initialization";

Yuxarıda simli elan edərkən müxtəlif başlanğıc üsulları verilmişdir. Birinci və ikinci metodda simli işə salmaq üçün nizamlı sıra başlatma texnikasından istifadə olunur. Dizinin simvollarından istifadə edərək serialın hər bir elementini işə salır və '\ 0' sıfır simvol əlavə edərək sətri sonlandırır.

Üçüncü metodda, sıra elementlərinin sayını təyin etməmişik, ancaq başlatma dəyəri massivdəki elementlərin sayını təyin edir. Ancaq bu başlatma növü yalnız bir söz ala bilər. Sətr daxilində heç bir boşluq qəbul edə bilməz. Burada bütün sətrin özü ikiqat təkliflərdən istifadə edərək sətir dəyəri kimi daxil edilir. Bu avtomatik olaraq hər bir simvolu massiv elementlərinə tapşıracaq və sonunda sıfır simvol əlavə edəcəkdir. Sətrin sonunda '\ 0' yazmamalıyıq.

Forth metodu elementlərin sayını göstərdiyimiz sətri işə salmağın başqa bir yoludur. Beləliklə, çoxlu sözləri simli olaraq götürə bilər. Sətir dəyəri tamamlandıqda avtomatik olaraq massiv elementinə '\ 0' əlavə edir.

Son üsul başqa bir yoldur sim xarakter göstəricisi istifadə edərək başlanğıc. Göstərici dəyişəni əvvəlcə sətrin başlanğıc ünvanını göstərəcək. Sətirdə simvolların sayı artdıqca, xarakterin göstəricisi bütün sətri saxlamaq üçün daha da irəliləyir. Bu barədə daha çox məlumat göstərici hissəsində müzakirə olunur.

Sətri elan etdikdən sonra

Bu metodda birbaşa yuxarıda göstərildiyi kimi simli dəyişənə heç bir simli təyin edə bilmərik. Sətir dəyərini simli dəyişənə kopyalamaq üçün strcpy () simli kopyalama funksiyasından istifadə etməliyik. yəni;
strcpy chrString, “Simli dəyər”); // simli dəyərini simli dəyişənə kopyalayır

Xarakter göstəricisindən istifadə etdikdə, dəyərləri təyin etməyə yönəldə bilmərik. Bunu göstəriciyə dəyərlər təyin etməyə bərabər olan başqa bir sətrin ünvanına yönəltməliyik. yəni;

chrPtr = chrString;// göstərici dəyişəninə chrString adresini kopyalayır, beləliklə chrString dəyərini alır

#include 
#include 

void main(){
	char chrString[15];
	char *chrPtr;
 
  	 strcpy(chrString, "String Value"); //copies the string value to string variable
	printf("  \nchrString[15] = \"String Value\"== > %s ", chrString);
 
	chrPtr = chrString;// copies the address of chrString to pointer variable, hence gets the value at chrString
	printf("\nValue of String Pointer is: %s", chrPtr);
}

Fayl və ya klaviatura istifadə edərək dəyər daxil edilir

Simli dəyərlər klaviatura və ya standart giriş faylı istifadə edərək daxil edilə bilər. Qiymətləri daxil etmək üçün scanf funksiyasından istifadə edirik. Scanf funksiyası klaviaturadan və ya istifadəçidən dəyəri qəbul edir və dəyəri dəyişən adın göstərdiyi ünvana qoyur. Buna görə dəyərləri dəyişənə qəbul etmək üçün ünvan operatorundan istifadə edirik. Ancaq burada bir sıra simvollara simli dəyərlər əlavə edəcəyik. Dizinin adını heç bir indeks olmadan təyin etdikdə onlar göstərici kimi davranırlar - bu, massivin ilk elementinin ünvanını göstərir. Beləliklə, simvol massivindən istifadə edərək dəyərləri qəbul etdiyimiz zaman ünvan operatorunu göstərməməliyik. Ancaq scanf funksiyası hər dəfə yalnız bir söz qəbul edir. Sətri birdən çox sözlə daxil etməyimiz lazım olsa, get () funksiyasından istifadə edə bilərik. Aşağıdakı nümunə proqramı da eyni şeyi göstərir.

#include 
#include 

void main(){
	char chrString[20];
 	printf("\nPlease enter any String Value:");
	gets(chrString); // Accepts multiple words of string value
	printf("\nEntered String Value using puts() function is:");
	puts(chrString);
	printf("\nPlease enter another String Value:");
	scanf("%s", chrString);// Accepts single word of string value
	printf("\nEntered String Value is : %s", chrString);
}

Simli giriş

Simli dəyişənlərə digər dəyişənlər kimi də daxil olmaq olar. Bir sıra simvol olmasına baxmayaraq, normal bir dəyişən kimi əldə edildikdə, içəridə saxlanılan bütün dəyəri verirlər. Ancaq tam sıra ilə doğru deyil.

Dəyişəndə ​​bütün sətir dəyərini görməliyiksə, printf funksiyasında '% c' əvəzinə '% s' istifadə edə bilərik. % c istifadə etsək, yalnız bir simvol,% s isə bütün simli göstərəcəkdir. Put () funksiyası bütün simli heç bir problem olmadan göstərəcəkdir.

printf ("\ ChrString-də dəyər:% s", chrString);
qoyur (chrString);

#include 
#include 

void main(){
	char chrString[20]; 
	 strcpy(chrString,"String Example"); //copies the string value to string variable
	printf(" \nValue at chrString using printf function is: %s ", chrString);
 	printf(" \nValue at chrString using puts() function is: ");
	puts(chrString);
}

Simli funksiyalar

String C -də bir sıra olduğundan, bir sətri başqa bir dəyişənə kopyalamaq, iki sətri müqayisə etmək, sətrin uzunluğunu tapmaq və s. Ancaq bunlar sim üzərində edilən ən çox görülən əməliyyatlardır. Buna görə də proqramda hər zaman bir sim istifadə edildikdə, bütün bu əməliyyatlar üçün proqramları hər dəfə yaza bilmərik. Bu sətirlər üçün yaradılmış ümumi bir funksiyamız varsa, lazım olduqda yenidən istifadə edilə bilər. Beləliklə C, strings üzərində çoxlu ümumi funksiyalar yaratdı və string.h başlıq fayllarında saxladı. String və funksiyalarından nə vaxt istifadə etsək, preprocessor təlimatı string.h proqramında vəzifələrimizi asanlaşdırır.

C-də ən çox istifadə olunan simli funksiyalar bunlardır:

Strlen ()

C -dəki bu funksiya sətrin uzunluğunu tapmaq üçün istifadə olunur. Sətirdəki simvol sayını qaytarır. String uzunluğunu hesablayarkən son null terminatoru nəzərə almır. -Ə ötürülən sətrin uzunluğu olan tam ədəd qaytarır arqument kimi fəaliyyət göstərir.

intStrLen = strlen (chrStr);

İstifadəçi tərəfindən simli dəyərini qəbul edən və uzunluğunu tapan sadə bir proqram aşağıda göstərilmişdir.

#include 
#include 

void main(){
	char chrStr[50];
	int intStrLen;

	printf("\nPlease enter any String Value:");
	gets(chrStr); // Accepts multiple words of string value
 
	intStrLen= strlen(chrStr); //Returns the string length
	printf("\nLenght of the string is: %d", intStrLen);
}

Strcpy ()

Bir sətir başqa bir sətir dəyişəninə köçürülməlidirsə, onu səciyyəvi olaraq - sətir elementi ilə başqa sətir dəyişəninə kopyalamalıyıq. Eyni, strcpy () adlı bir funksiyada edilir və lazım olduqda istifadəyə verilmişdir. Bu string.h başlıq sənədində də mövcuddur.

Strcpy üçün ümumi sintaksis aşağıdakı kimi göstərilmişdir:

strcpy (string1, string2);

String2-dəki dəyəri stirng1-ə kopyalayır. Əgər string1-in ölçüsü string2-dən kiçikdirsə, onda yalnız string1-ə sahib olan bir çox simvolu kopyalayır. Qalan simvollar atılır.

#include 
#include 

void main(){
	char chrStr[50];
	char chrCopyStr[50];
 
	printf("\nPlease enter any String Value:");
	gets(chrStr); // Accepts multiple words of string value
	printf("\nEntered String Value is:");
	puts(chrStr);

	strcpy(chrCopyStr, chrStr); // Copies the value at chrStr to chrCopyStr
	printf("\nCopied String Value is: %s", chrCopyStr);
	 
}

Strcat ()

Bir kodda iki simli birinə birləşdirməliyik. Bu, ikinci simvolun xarakteri ilə xarakterin kopyalanması və birinci simlin sonunda əlavə edilməsi ilə də həyata keçirilir. Birinci sətrin ölçüsünü ikinci sətirdə bütün dəyəri tutmaq üçün yetərli olduğunu da yoxlamaq lazımdır.

eyni yoxlama və dəyərləri başqa bir sətrə əlavə etmək strcat () simli funksiyası ilə həyata keçirilir. İki simli birləşdirir. Bunun üçün ümumi sintaksis:

strcat (string1, string2);

string2 dəyərini string1-ə kopyalayır və əlaqələndirilmiş nəticə string1-in özündə tapılır. İki simli birləşdirdikdə, ilk simli sonunda boş terminatoru silir və əlavə etməyə başlayır. Birinci sətirlə ikinci sətir arasında boşluq əlavə etmir. İlk simli bitdikdən qısa müddət sonra simli əlavə edir. Aşağıdakı proqramda eyni şey müşahidə edilə bilər.

#include 
#include 

void main(){
	char chrStr1[50], chrStr2[50];
 
	printf("\nPlease enter first String Value:");
	gets(chrStr1); // Accepts multiple words of string value
	printf("\nPlease enter second String Value:");
	get(chrStr2); // Accepts multiple words of string value
   
	strcat(chrStr1, chrStr2); // Combines the value at chrStr2 with chrStr1 and stores the result at chrStr1
	printf("\nCopied String Value is: %s", chrStr1);
	 
}

Strcmp ()

Hər hansı bir simli proqramda ən ümumi tələblərdən biri də simləri müqayisə etməkdir. İstənilən iki simli müqayisə etmək birbaşa deyil. Yenidən xarakter xarakterlidir. Eyni şey iki simli müqayisə edən və müqayisə nəticələrindən asılı olaraq tam dəyər verən strcmp funksiyasında yerinə yetirilir. Geri qayıdır

  • 0, hər iki sim eyni olsa.
  • -1, bərabər deyilsə və birinci sətir ikinci sətirdən azdırsa.
  • 1, bərabər deyilsə və birinci sətir ikinci sətirdən böyükdürsə.

Bir simdən az və ya daha böyük dedikdə, əslində simvol simvolunun ASCII dəyərini alır və digər simvoldan böyük və ya az olduğunu yoxlayır. Simli müqayisə əslində simvolun ASCII dəyərlərində simldəki simvolun həqiqi dəyərindən daha çox edilir.

Simli müqayisə üçün ümumi sintaksis belə olacaqdır:

intResult = strcmp (string1, string2);

Bu string1 ilə string2 müqayisə və nəticəni intResult qaytarır.

Aşağıdakı sadə bir proqram, iki simli müqayisə etmək üçün strcmp-dən necə istifadə edəcəyini göstərir.

#include 
#include 

void main(){
	char chrStr1[50], chrStr2[50];
	int intResult;

	printf("\nPlease enter first String Value:");
	gets(chrStr1); // Accepts multiple words of string value
	printf("\nPlease enter second String Value:");
	gets(chrStr2); // Accepts multiple words of string value

	intResult = strcmp(chrStr1, chrStr2); // Compares two strings chrStr1 and chrStr2 and returns the result to intResult
	
	if (intResult == 0)
		printf("\nBoth the strings are same!");
	else if (intResult < 0)
		printf("\nString 1 is smaller than String 2");
	else
		printf("\nString 1 is greater than String 2");
}

Crack Sistemi Dizayn Müsahibələri
Translate »
1