تحديات برمجيةالتحدي الثاني - حل التمرين الرابع بلغة C
المطلوب
قم بإنشاء برنامج يطلب من المستخدم إدخال ثلاث نصوص و يخزنهم في ثلاث متغيرات نصية هي S1
, S2
و S3
و بعدها ينفذ التالي:
- يخبره ما إن كان دمج
S1
معS2
يساويS3
أم لا. - يخبره ما إن كان
S1
يمثل جزء منS2
أو يساويه ( أيS1 == s2
). - إذا كان طول
S1
أكبر من طولS2
قم بإضافة نصS2
علىS1
و خزن الناتج في متغير نصي جديد إسمهS4
. - إذا كان طول
S2
أكبر من طولS1
قم بإضافة نصS1
علىS2
و خزن الناتج في متغير نصي جديد إسمهS4
. - يخبره ما إن كان
S2
يمثل جزء من ثاني نصف فيS1
. - يعرض له الأحرف الموجودة في أول نصف في
S1
.
الحل بلغة C
void main() { char S1[MAX_SIZE]; char S2[MAX_SIZE]; char S3[MAX_SIZE]; char * S4 = (char*)malloc(sizeof(MAX_SIZE) + 1); char * concatenated = (char*)malloc(sizeof(MAX_SIZE) + 1); char * temp = (char*)malloc(sizeof(MAX_SIZE) + 1); int counter = 0; int concateIndex = 0; printf("Enter S1: "); gets(S1); printf("Enter S2: "); gets(S2); printf("Enter S3: "); gets(S3); printf("---------------------------------------\n"); // Part 1 for (int i = 0; i < strlen(S1); i++) { concatenated[concateIndex] = S1[i]; concateIndex++; } for (int i = 0; i < strlen(S2); i++) { concatenated[concateIndex] = S2[i]; concateIndex++; } concatenated[concateIndex] = '\0'; printf("The concatenation of S1 and S2 is equal S3? "); printf("%s\n", (strcmp(S3, concatenated) == 0)? "True": "False"); // Part 2 printf("S1 is part of S2 or S1=S2? "); printf("%s\n", (strstr(S2, S1) != NULL)? "True": "False"); // Part 3 if (strlen(S1) > strlen(S2)) { int index = 0; for (int i = 0; i < strlen(S2); i++) { S4[index] = S2[i]; index++; } for (int i = 0; i < strlen(S1); i++) { S4[index] = S1[i]; index++; } S4[index] = '\0'; } // Part 4 if (strlen(S2) > strlen(S1)) { int index = 0; for (int i = 0; i < strlen(S1); i++) { S4[index] = S1[i]; index++; } for (int i = 0; i < strlen(S2); i++) { S4[index] = S2[i]; index++; } S4[index] = '\0'; } // Part 5 printf("S2 is part of the second half of S1? "); for (int i = strlen(S1) / 2; i <= strlen(S1); i++) { temp[counter] = S1[i]; counter++; } temp[counter] = '\0'; printf("%s\n", (strstr(temp, S2) != NULL)? "True": "False"); // Part 6 printf("The first half characters of S1 are: "); for (int i = 0; i < strlen(S1) / 2; i++) { printf("%c", S1[i]); } }
سنحصل على النتيجة التالية في حال تم إدخال نفس القيم التي تم تعليمها باللون الأصفر عند التشغيل.
Enter S1: Mhamad
Enter S2: Harmush
Enter S3: MhamadHarmush
---------------------------------------
The concatenation of S1 and S2 is equal S3? true
S1 is part of S2 or S1=S2? false
S2 is part of the second half of S1? false
The first half characters of S1 are: Mha
Enter S2: Harmush
Enter S3: MhamadHarmush
---------------------------------------
The concatenation of S1 and S2 is equal S3? true
S1 is part of S2 or S1=S2? false
S2 is part of the second half of S1? false
The first half characters of S1 are: Mha