נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: עזרה דחופה

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
מרינה
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 07 January 2009 בשעה 15:30 | IP רשוּם
ציטוט מרינה

נסיתי הרבה לפתור את התרגיל הזה אבל לא הצלחתי!!!!

אולי יש למישהו רעיון איך פותרים אותו?

void str_replace(char *src, char *sub, char *repl

הפונקציה מחליפה את כל ההופעות של המ חרוזת sub בתוך המחרוזת src , בהופעות של

המחרוזת repl .

לדוגמא, בעקבות קטע-התוכנית הבא:

"char src[]= “the dog jumped over the fox

char sub[] = “the

char repl[] = “a

str_replace(src, sub, repl

printf(“%s”, src

הפלט יהיה:

a dog jumped over a fox

כתבו תכנית שקולטת מהמשתמש שלוש מחרוזות src, sub, repl כאמור לעיל, ומציגה

על המסך את src אחרי החלפת כל ההופעות של sub ב- repl .

א. א ין להשתמש במערך עזר, אלא ב- pointer arithmetics .

ב. ז כרו כי לרשותכם עומדת ספריית string.h

 

חזרה לתחילת העמוד הצג את כרטיס החבר של מרינה חפש הודעות אחרות של מרינה בקר בדף הבית של מרינה
 
ניר
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 12 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 3296
נשלח בתאריך: 07 January 2009 בשעה 19:01 | IP רשוּם
ציטוט ניר

התוכנית לא מסובכת. מה ניסית? מה לא הצליח?

__________________
מספר האייסיקיו שלי ו/או כתובת ה-MSN שלי אינם מהווים מוקד תמיכה
חזרה לתחילת העמוד הצג את כרטיס החבר של ניר חפש הודעות אחרות של ניר בקר בדף הבית של ניר
 
מרינה
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 07 January 2009 בשעה 19:59 | IP רשוּם
ציטוט מרינה

לא הצלחתי לכתוב את הפונקצה בלי להשתמש במערך עזר..
חזרה לתחילת העמוד הצג את כרטיס החבר של מרינה חפש הודעות אחרות של מרינה בקר בדף הבית של מרינה
 
ניר
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 12 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 3296
נשלח בתאריך: 08 January 2009 בשעה 01:34 | IP רשוּם
ציטוט ניר

אוקיי, הנה הרמז שלך: את לא צריכה ליצור את המחרוזת המוחלפת (כלומר שיהיה לך מערך שמכיל אותה). את צריכה להדפיס אותה.

שמה לב איך זה מפשט את הבעיה?


__________________
מספר האייסיקיו שלי ו/או כתובת ה-MSN שלי אינם מהווים מוקד תמיכה
חזרה לתחילת העמוד הצג את כרטיס החבר של ניר חפש הודעות אחרות של ניר בקר בדף הבית של ניר
 
שיר
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 08 January 2009 בשעה 13:39 | IP רשוּם
ציטוט שיר

היי אני צריכה  עזרה בבקשה

הפונקצייה לא קשה אבל אני קצת נתקעתי עם for

יש להשתמש ברקורסיה בלבד, אפשר להשתמש בפונקצייה עזר,

הפונקצייה מקבלת מחרוזת וצריכה להוריד את כל הכפילויות..

 

תודה!

חזרה לתחילת העמוד הצג את כרטיס החבר של שיר חפש הודעות אחרות של שיר בקר בדף הבית של שיר
 
פרופסור
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 08 January 2009 בשעה 17:10 | IP רשוּם
ציטוט פרופסור

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

#define MAX_LEN 100


/*
 * This function replaces the occurances of 'sub' in 'src' with the
 * string 'repl'.
 * assumption: length of 'repl' smaller or equal to the length of 'sub'
 */
void str_replace(char *src, char *sub, char *repl) {

    char *ptr1, *ptr2; /* two pointers for going over the input string */
    
    int repl_len = strlen(repl),
        sub_len = strlen(sub);
    int diff = sub_len - repl_len;

    /* loop over all instances of string to replace */
    ptr1 = strstr(src, sub);
    while (ptr1 != NULL)
    {
        /* copy replacing string into string.
        /* we use strncpy in order not to copy the terminator '\0' */
        strncpy(ptr1, repl, repl_len);

       
        /* increment both pointers,
         * ptr1 points to the string after the replacement
         * ptr2 points to the string after the substituted part
         * (which may be longer) */
        ptr2 = ptr1 + sub_len;
        ptr1 += repl_len;

        /* this loop moves characters backwards,
         * if the replaced string was shorter than the original part */
        while ((*ptr2) != '\0')
        {
            *(ptr2-diff) = (*ptr2);
            ptr2++;
        }
        *(ptr2 - diff) = '\0';

        /* get next instance */
        ptr1 = strstr(ptr1, sub);
    }
}


/*
 * Read a string from the user until the end of the line.
 * read no more than size characters and ignore the rest.
 */
void getline(char *arr, int size)
{
    int counter = 0;
    char c = getchar();

    while (c != '\n')
    {
        if (counter < size)
        {
            *arr = c;
            arr++;
        }
        counter++;
        c = getchar();
    }

    *arr = '\0';
}


int main(int argc, char* argv[]) {

    char src[MAX_LEN + 1];
    char sub[MAX_LEN + 1];
    char repl[MAX_LEN + 1];

    printf("Please enter a string: ");
    getline(src, MAX_LEN);
    printf("Please enter a part to substitute: ");
    getline(sub, MAX_LEN);
    printf("Please enter the replacement: ");
    getline(repl, MAX_LEN);

    /* make sure none of the strings is empty */
    if (*src == '\0'  ||  *sub == '\0'  ||  *repl == '\0') {
        printf("Empty string. Please check your input.\n");
        return 1;
    }

    /* make sure the replacment is not longer than the substituted string */
    if (strlen(sub) < strlen(repl)) {
        printf("replacement substring should not be longer than the replaced substring\n");
        return 1;
    }

    str_replace(src, sub, repl);
    printf("after replacement: %s\n", src);getch();
}
// End Of File

בהצלחה רבה.
 
חזרה לתחילת העמוד הצג את כרטיס החבר של פרופסור חפש הודעות אחרות של פרופסור בקר בדף הבית של פרופסור
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

קפיצה לפורום
אינך יכול/ה לשלוח נושאים חדשים בפורום זה
אינך יכול/ה להגיב לנושאים בפורום זה
אינך יכול/ה למחוק את הודעותיך ותגוביך בפורום זה
אינך יכול/ה לערוך את הודעותיך ותגובותיך בפורום זה
אינך יכול/ה לצור סקרים בפורום זה
אינך יכול/ה להצביע בסקרים בפורום זה