Programming Basics SQL HTML CSS JavaScript Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Learn Typing

تحديات برمجيةالتحدي الثاني - حل التمرين الثاني بلغة C

المطلوب

قم بتعريف دالة إسمها ReplaceAll, فكرتها البحث في النص عن جزئية ( كلمة أو جملة ) محددة و تبديلها بجزئية أخرى.
عند استدعاءها يجب أن نمرر لها ثلاث نصوص. الأول يمثل نص عادي, الثاني يمثل الجزئية التي نريد البحث عنها, و الثالث يمثل الجزئية التي نريد وضعها مكان الجزئية الثانية.
في النهاية يجب أن ترجع نسخة من النص الأول بعد أن تم تبديل الجزئية التي البحث عنها بالجزئية التي نريد وضعها مكانها.
بعدها قم بتجربة هذه الدالة في البرنامج.

مثال: باستخدام الدالة ReplaceAll() يمكننا تبديل كل كلمة "cat" موجودة في النص "I like cats. I have one cat." بالكلمة "dog" و عندها سترجع لنا النص "I like dogs. I have one dog.".


الحل بلغة C

#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#define MAX_SIZE 1000
char * replaceAll(char * text, char * find, char * replacement)
{
int textLen = strlen(text);
int findLen = strlen(find);
int replacementLen = strlen(replacement);
char * newS = (char*)malloc(sizeof(MAX_SIZE) + 1);;
bool found;
int newSIndex = 0;
int findIndex;
if (textLen < findLen)
{
return text;
}
for (int i = 0; i < textLen;)
{
found = true;
findIndex = 0;
for (int j = i; j < i + findLen && j < textLen; j++)
{
if (text[j] != find[findIndex])
{
found = false;
}
findIndex++;
}
if (found == true)
{
for (int j = 0; j < replacementLen; j++)
{
newS[newSIndex] = replacement[j];
newSIndex++;
}
i += findLen;
}
else
{
newS[newSIndex] = text[i];
newSIndex++;
i++;
}
}
newS[newSIndex] = '\0';
return newS;
}
void main() {
char * text = "I like cats. I have one cat.";
char * find = "cat";
char * replacement = "dog";
char * newS;
printf("Before: %s \n", text);
newS = replaceAll(text, find, replacement);
printf("After: %s \n", newS);
}
#include <stdio.h> #include <string.h> #include <stdbool.h> #define MAX_SIZE 1000 char * replaceAll(char * text, char * find, char * replacement) { int textLen = strlen(text); int findLen = strlen(find); int replacementLen = strlen(replacement); char * newS = (char*)malloc(sizeof(MAX_SIZE) + 1);; bool found; int newSIndex = 0; int findIndex; if (textLen < findLen) { return text; } for (int i = 0; i < textLen;) { found = true; findIndex = 0; for (int j = i; j < i + findLen && j < textLen; j++) { if (text[j] != find[findIndex]) { found = false; } findIndex++; } if (found == true) { for (int j = 0; j < replacementLen; j++) { newS[newSIndex] = replacement[j]; newSIndex++; } i += findLen; } else { newS[newSIndex] = text[i]; newSIndex++; i++; } } newS[newSIndex] = '\0'; return newS; } void main() { char * text = "I like cats. I have one cat."; char * find = "cat"; char * replacement = "dog"; char * newS; printf("Before: %s \n", text); newS = replaceAll(text, find, replacement); printf("After: %s \n", newS); }

سنحصل على النتيجة التالية عند التشغيل.

Before: I like cats. I have one cat.
After:  I like dogs. I have one dog.