עבור לתוכן

צריכה מימוש של פונקציה ב-C

Featured Replies

פורסם

מימוש של הפונקציה Strsub

תודה :]

פורסם

אני יכול לתאר לעצמי שזו פונקציה שמחזירה תת מחרוזת אבל יעזור אם תפרטי קצת יותר, למשל האם היא מקבלת מחרוזת, אינדקס ומס' תווים או אינדקס של התו האחרון? האם ניסית משהו בעצמך ונתקעת?

פורסם

אם אתה שואל אותי didi18 התרגלה פשוט יותר מידיי לחיים הקלים שהפורום הזה מספק לה:

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

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

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

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

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

אבל העיקר ששמרה עדיין על מידת נימוס מסויימת "תודה :]", זה הרי היה יכול להיות "מימוש של הפונקציה Strsub, ושיהיה זריז כי יש לי עוד דברים לעשות היום!"

אבל זה רק אם אתה שואל אותי...

פורסם

אין לי בעיה שאנשים ש"מרמים את השיטה" כי הם מרמים את עצמם בסופו של דבר. שיעתיקו חופשי ויתנו למישהו אחר לעשות שיעורי בית כי בסוף המבחנים בתיכנות לרוב לא מבוססים על שינון אלא על יכולת תיכנות .

ואם הבנתי נכון אז זה פונקציה פשוטה מדי שמישהו ישבור את הראש. זה בודק אם אתה יודע להשתמש ב for loop בc ואם אתה יודע לעשות חשבון פשוט של חישוב אורך ואם אתה יודע להגן על עצמך מפני input לא חוקי.

רמז מספיק?

פורסם

כמו שנאמר כאן, הפונקציה פשוטה: בודקת שהקלט (של האינדקס ומס' התווים / אינדקס של התו האחרון) תקין, מקצה מערך באורך של מס' התווים + 1 (בשביל ה '\0'), מעתיקה בלולאה את התווים מהמחרוזת המקורים לחדשה ומציבה '\0' בסוף.

תנסי, תעלי לפה את מה שניסית ונעזור לך.

פורסם

Niseg, אני לא חושב שירדת לסוף דעתי. אין לי בעיה עם, איך כינית את זה, "אנשים שמרמים את עצמם". המטרה ממש לא הייתה להעביר ביקורת או משהו בסגנון, להיפך הערכתי את זה שסוף סוף didi18 נהגה בכנות והציגה ישירות את רצונה:

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

במקום ללכת סחור סחור, ולעכב את התהליך כולו.

אולם בחרתי להכניס מעט הומור בהודעה, שכנראה לא בהכרח מתפרשת כך, ועל כן הבהרה זו.

מטרת ההודעה, אם כן, הייתה מעט הומור, ולבסוף גם להבין מה בדיוק הפונקציה שביקשה לה מימוש אמורה לעשות.

בכל אופן, אם גם את, didi18, פירשת את ההודעה בתור ביקורת אז אל, הכל ברוח טובה, קצת ציניות אבל ממש בצחוק.

ואם לחזור לבקשתך המקורית, אני מאמין שהבהרה נוספת לגביה, עתידה לספק לך גם את הפיתרון. נראה כי יש מספיק אנשים כאן, שרק לצורך הפגת השיעמום (כן, לפעמים גם אני) יקדישו 5 דקות גם אם כדי לממש את הפונקציה הנ"ל.

פורסם
  • מחבר

אם אתה שואל אותי didi18 התרגלה פשוט יותר מידיי לחיים הקלים שהפורום הזה מספק לה:

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

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

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

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

אבל העיקר ששמרה עדיין על מידת נימוס מסויימת "תודה :]", זה הרי היה יכול להיות "מימוש של הפונקציה Strsub, ושיהיה זריז כי יש לי עוד דברים לעשות היום!"

אבל זה רק אם אתה שואל אותי...

טוב שלא הגזמתם....

ביקשתי מימוש של פונקציה לא קיימת בכלל יש פונקציה substr

לא מה שאני חשבתי שקיים..

פשוט ראיתי שימוש בפונקציה שלא קיימת ולא הבנתי למה אני לא מוצאת באינטרנט את המימוש אז חשבתי שאתם תוכלו לעזור לי... זה הכל

ואין פה קטע של שיעורי בית... אני סיימתי ללמוד ביצפר

פורסם

הבעיה היא פשוט שלא מעט פעמים בפורום אנשים באים ומצפים שיפתרו להם את שיעורי הבית, עם פוסטים בסגנון של "צריך X דחוףףףףף למחר".

אם זה לא המקרה אז אין בעיה :) (למרות שתיאור מפורט יותר של הבעיה מלכתחילה היה עוזר).

אין פונקציה סטנדרטית כזו ב c אבל לפי השם שלה ניתן להסיק שהיא מחזירה תת מחרוזת מתוך מחרוזת (כנראה לפי אינדקס ואורך/אינדקס של התו האחרון).

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

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

אם את צריכה את זה לשימוש חוזר אפשר לעשות משהו כזה (לא בדקתי אם זה עובד):

char* strsub(char* source, int starti, int count)
{
if(starti < 0 || count < 1)
return NULL;

int length = strlen(source);
if((starti > length) || (starti+count) > length)
return NULL;

char* result = (char*) malloc(count+1);
if (result==NULL)
return NULL;

strncpy(result, source+starti, count);
result[count] = '\0';

return result;
}

רק לא לשכוח לשחרר את המחרוזת עם free אחרי שגמרת להשתמש בה.

פורסם

1) בIF השני, מספיק לבדוק - starti+count>length(הרי count>0).

2) אתה חייב להכפיל את מספר הבתים שטתה מקצה ב- sizeof(char), אחרת תהייה טעות במערכות בה char הוא 2 בתים.

פורסם

צודק, לא שמתי לב ששכחתי להכפיל ב sizeof(char).

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים