السلاسل في C: كيفية الإعلان عن متغيرات السلسلة وتهيئتها في C

ما هي السلسلة في C؟

A سلسلة في C لا يعد هذا سوى مجموعة من الأحرف في تسلسل خطي. يعامل "C" دائمًا السلسلة باعتبارها بيانات واحدة حتى لو كانت تحتوي على مسافات بيضاء. يتم تعريف حرف واحد باستخدام تمثيل علامة اقتباس مفردة. يتم تمثيل السلسلة باستخدام علامتي اقتباس مزدوجتين.

Example, "Welcome to the world of programming!"

يوفر 'C' مكتبة قياسية يحتوي على العديد من الوظائف التي يمكن استخدامها لإجراء عمليات معقدة بسهولة على السلاسل في C.

كيفية الإعلان عن سلسلة في لغة C؟

سلسلة AC عبارة عن مصفوفة بسيطة تحتوي على char كنوع بيانات. 'لغة سي لا يدعم السلسلة بشكل مباشر كنوع بيانات. ومن ثم، لعرض سلسلة في لغة C، تحتاج إلى الاستفادة من مصفوفة الأحرف.

بناء الجملة العام للإعلان عن متغير كسلسلة في C هو كما يلي،

char string_variable_name [array_size];

يمكن إجراء الإعلان الكلاسيكي للسلاسل على النحو التالي:

 char string_name[string_length] = "string";

يجب تحديد حجم المصفوفة أثناء الإعلان عن متغير سلسلة C لأنه يستخدم لحساب عدد الأحرف التي سيتم تخزينها داخل متغير السلسلة في لغة C. بعض الأمثلة الصالحة لتعريف السلسلة هي كما يلي،

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

يمثل المثال أعلاه متغيرات سلسلة بحجم مصفوفة 15. وهذا يعني أن مصفوفة سلسلة C المحددة قادرة على الاحتفاظ بـ 15 حرفًا على الأكثر. تبدأ فهرسة المصفوفة من 0 وبالتالي سيتم تخزين الأحرف من الموضع 0-14. يقوم مترجم C تلقائيًا بإضافة حرف NULL '\0' إلى مصفوفة الأحرف التي تم إنشاؤها.

كيفية تهيئة سلسلة في C؟

دعنا ندرس تهيئة السلاسل في لغة C. يوضح المثال التالي تهيئة السلاسل في لغة C،

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

في السلسلة 3، يجب إضافة الحرف NULL بشكل صريح، ويتم وضع الأحرف ضمن علامات اقتباس مفردة.

يسمح لنا "C" أيضًا بتهيئة ملف متغير السلسلة بدون تحديد حجم مجموعة الأحرف. ويمكن القيام بذلك بالطريقة التالية،

char first_name[ ] = "NATHAN";

يعمل اسم السلاسل النصية في لغة C كمؤشر لأنه في الأساس عبارة عن مصفوفة.

إدخال السلسلة C: برنامج C لقراءة السلسلة

عند كتابة برامج تفاعلية تطلب من المستخدم إدخالها، توفر لغة C الوظائف scanf() وgets() وfgets() للعثور على سطر من النص تم إدخاله من المستخدم.

عندما نستخدم scanf() للقراءة، نستخدم محدد التنسيق "%s" دون استخدام "&" للوصول إلى عنوان المتغير لأن اسم المصفوفة يعمل كمؤشر.
فمثلا:

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

الإخراج:

Enter your first name and age:
John_Smith 48

المشكلة في الدالة scanf هي أنها لا تقرأ السلاسل الكاملة في لغة C مطلقًا. وستقوم بإيقاف عملية القراءة بمجرد حدوث مسافة بيضاء أو تغذية النموذج أو علامة التبويب الرأسية أو السطر الجديد أو عودة السطر. لنفترض أننا قدمنا ​​مدخلات كـ "Guru99 Tutorials"، فإن وظيفة scanf لن تقرأ أبدًا سلسلة كاملة حيث توجد مسافة بيضاء بين الاسمين. سوف تقوم وظيفة scanf بالقراءة فقط Guru99.

من أجل قراءة سلسلة تحتوي على مسافات، نستخدم الدالة get(). يحصل على تجاهل المسافات البيضاء. توقف

القراءة عند الوصول إلى السطر الجديد (يتم الضغط على مفتاح Enter).

فمثلا:

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

الإخراج:

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

البديل الآخر الأكثر أمانًا لـ gets() هو الدالة fgets() التي تقرأ عددًا محددًا من الأحرف.
فمثلا:

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

الإخراج:

Enter your name plz: Carlos
My name is Carlos

وسيطات fgets() هي:

  • اسم السلسلة،
  • عدد الحروف المراد قراءتها،
  • يعني stdin القراءة من الإدخال القياسي وهو لوحة المفاتيح.

إخراج سلسلة C: برنامج C لطباعة سلسلة

تُستخدم الدالة printf القياسية لطباعة أو عرض السلاسل النصية في لغة C على جهاز الإخراج. محدد التنسيق المستخدم هو %s

سبيل المثال،

printf("%s", name);

يتم إخراج السلسلة باستخدام الدالتين fputs() وprintf().

وظيفة fputs()

يحتاج fputs() إلى اسم السلسلة ومؤشر إلى المكان الذي تريد عرض النص فيه. نحن نستخدم stdout الذي يشير إلى الإخراج القياسي للطباعة على الشاشة.
فمثلا:

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

الإخراج:

Enter your town: New York
New York

يضع وظيفة

تُستخدم دالة puts لطباعة سلسلة نصية بلغة C على جهاز إخراج وتحريك المؤشر مرة أخرى إلى الموضع الأول. يمكن استخدام دالة puts بالطريقة التالية:

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

بناء جملة هذه الوظيفة بسيط نسبيًا مقارنة بالوظائف الأخرى.

مكتبة السلسلة

توفر مكتبة "C" القياسية وظائف مختلفة لمعالجة السلاسل داخل البرنامج. تسمى هذه الوظائف أيضًا بمعالجات السلسلة. كل هؤلاء المعالجين موجودون في الداخل الملف الاساسي.

الوظيفة الهدف
سترلين () تُستخدم هذه الوظيفة للعثور على طول السلسلة. تقوم بإرجاع عدد الأحرف الموجودة في سلسلة باستثناء الحرف NULL.
strcat (str1، str2) تُستخدم هذه الوظيفة لدمج سلسلتين معًا لتكوين سلسلة واحدة. يقوم بإلحاق أو تسلسل str2 إلى نهاية str1 وإرجاع مؤشر إلى str1.
ستكمب (ستر1، str2) تُستخدم هذه الوظيفة لمقارنة سلسلتين مع بعضهما البعض. تُرجع 0 إذا كانت str1 تساوي str2، وأقل من 0 إذا كانت str1 < str2، وأكبر من 0 إذا كانت str1 > str2.

دعونا ننظر في البرنامج أدناه الذي يوضح وظائف مكتبة السلسلة:

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

الإخراج:

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

وظائف المكتبة الهامة الأخرى هي:

  • strncmp(str1, str2, n) : تُرجع 0 إذا كانت الأحرف n الأولى من str1 تساوي الأحرف n الأولى من str2، وأقل من 0 إذا كانت str1 < str2، وأكبر من 0 إذا كانت str1 > str2.
  • strncpy(str1, str2, n) تُستخدم هذه الوظيفة لنسخ سلسلة من سلسلة أخرى. نسخ الأحرف n الأولى من str2 إلى str1
  • strchr(str1, c): تقوم بإرجاع مؤشر إلى أول ظهور للحرف c في str1، أو NULL إذا لم يتم العثور على الحرف.
  • strrchr(str1, c): يبحث في str1 في الاتجاه المعاكس ويعيد مؤشرًا إلى موضع char c في str1، أو NULL إذا لم يتم العثور على الحرف.
  • strstr(str1, str2): تقوم بإرجاع مؤشر إلى أول ظهور لـ str2 في str1، أو NULL إذا لم يتم العثور على str2.
  • strncat(str1, str2, n) يلحق (يسلسل) الأحرف n الأولى من str2 إلى نهاية str1 ويعيد مؤشرًا إلى str1.
  • strlwr() : لتحويل السلسلة إلى أحرف صغيرة
  • strupr() : لتحويل السلسلة إلى أحرف كبيرة
  • strrev() : لعكس السلسلة

تحويل سلسلة إلى رقم

في برمجة C، يمكننا تحويل سلسلة من الأحرف الرقمية إلى قيمة رقمية لتجنب حدوث خطأ وقت التشغيل. تحتوي مكتبة stdio.h على الوظائف التالية لتحويل السلسلة إلى رقم:

  • int atoi(str) تعني تحويل ASCII إلى عدد صحيح؛ يحول str إلى قيمة int المكافئة. يتم إرجاع 0 إذا لم يكن الحرف الأول رقمًا أو لم يتم العثور على أي أرقام.
  • double atof(str) تعني ASCII to float، وهي تحول str إلى قيمة double المكافئة. يتم إرجاع 0.0 إذا لم يكن الحرف الأول رقمًا أو لم يتم العثور على أي أرقام.
  • long int atol(str) تعني تحويل ASCII إلى long int، وتحويل str إلى قيمة عدد صحيح طويل مكافئة. يتم إرجاع 0 إذا لم يكن الحرف الأول رقمًا أو لم يتم العثور على أرقام.

يوضح البرنامج التالي دالة atoi():

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

الإخراج:

Enter a number: 221348
you enter 221348
  • يعد تعريف مؤشر السلسلة مثل char *string = "language" ثابتًا ولا يمكن تعديله.

الملخص

  • السلسلة عبارة عن سلسلة من الأحرف المخزنة في مصفوفة أحرف.
  • السلسلة هي نص محاط بعلامتي اقتباس مزدوجتين.
  • حرف مثل 'd' ليس سلسلة ويتم الإشارة إليه بعلامات اقتباس مفردة.
  • يوفر "C" وظائف مكتبة قياسية لمعالجة السلاسل في البرنامج. يتم تخزين مناورات السلسلة في الملف الاساسي.
  • يجب الإعلان عن السلسلة أو تهيئتها قبل استخدامها في البرنامج.
  • هناك وظائف مختلفة لسلسلة الإدخال والإخراج، ولكل منها ميزاتها الخاصة.
  • لا تنس تضمين مكتبة السلسلة للعمل مع وظائفها
  • يمكننا تحويل السلسلة إلى رقم من خلال atoi() وatof() وatol() وهي مفيدة جدًا لعمليات التشفير وفك التشفير.
  • يمكننا التعامل مع سلاسل مختلفة عن طريق تحديد مجموعة من السلاسل في لغة C.