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

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

المطلوب

قم بتعريف دالة إسمها RemoveAll, عند استدعاءها نمرر لها نصيّن, فترجع نسخة من النص لا تحتوي على النص الثاني.
بعدها قم بتجربة هذه الدالة في البرنامج.

مثال: إذا قمنا باستخدام الدالة RemoveAll() و تمرير النص "I like cats. I have one cat." و الكلمة "cat" لها فإنها سترجع النص "I like s. I have one .".


الحل بلغة C

#include <stdio.h>
#include <string.h>
#include <stdbool.h>

char * removeAll(char * s1, char * s2)
{
    int s1Len = strlen(s1);
    int s2Len = strlen(s2);
    
    char * newS = (char*)malloc(sizeof(s1) + 1);
    bool found;
    int newSIndex = 0;
    int s2Index;
    
    if (s1Len < s2Len)
    {
        return s1;
    }
    
    for (int i = 0; i < s1Len;)
    {
        found = true;
        s2Index = 0;
        for (int j = i; j < i + s2Len && j < s1Len; j++)
        {
            if (s1[j] != s2[s2Index])
            {
                found = false;
            }
            s2Index++;
        }
        
        if (found == true)
        {
            i += s2Len;
        }
        else
        {
            newS[newSIndex] = s1[i];            
            newSIndex++;
            i++;
        }
    }
    newS[newSIndex] = '\0';
    
    return newS;
}


void main() {
    
    char * s1 = "I like cats. I have one cat.";
    char * s2 = "cat";
    char * newS;

    printf("Before: %s \n", s1);
    
    newS = removeAll(s1, s2);

    printf("After:  %s \n", newS);
    
}

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

Before: I like cats. I have one cat.
After:  I like s. I have one .