עבור לתוכן

פונקצייה לטיפול במחרוזת | שפת C

Featured Replies

פורסם

אם נתונה לי חתימה של פונקציה כך:

int Count_Letter (char* Str, char letter)

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

איך אני עושה את זה בהתחשב שאני אמור לקבל רק אות קטנה או גדולה בטווח- a-z ואם זה לא אות אלא נניח ספרה אז אני מחזיר הודעה מתאימה ?

כמו כן זה לא כ"כ פשוט כי אסור לי להשתמש בפונקציות שקיימות ב- string.h אלא רק באלו שב- stdio.h בלבד...

אשמח לעזרה, תודה ! :smile1:

פורסם

הכי פשוט, תהפוך את letter לאות קטנה. תעבור על str אות אות, תבדוק אם האות הנוכחית היא בין 'a' ל 'z', אם כן תשווה ל letter ותחליט, אחרת תבדוק אם היא בין 'A' ל 'Z', אם כן, תהפוך אותה לקטנה (במשתנה זמני) ותשווה ל letter ותחליט, אחרת, תדפיס הודעה מתאימה.

פורסם

אתה עושה פונקציית while על המערך Str ועובר תו אחד כל פעם עד שאתה מקבל '0\' שזה התו האחרון מחרוזת

בכל מעבר אתה משווה בין התו שקיבלת לתו במקום Str כך שאם הם שווים או שיש בינהם הפרש של 31(ההפרש בין אות גדולה לקטנה באסקי, אם אני לא טועה) אתה מדגיל counter

פורסם
  • מחבר

int Count_Letter (char* Str, char letter)
{
char opposite;

if(letter >= 'A' && letter <= 'Z') opposite = letter + 32;
else if(letter >= 'a' && letter <= 'z') opposite = letter - 32;
else return -1;

int i=0, count=0;

while (Str[i] != '\0')
{
if(Str[i] == letter || Str[i] == opposite) count++;
i++;
}

return count;
}

האם זה מתאים ונכון כולל התחום שבו תחמתי את טווח האותיות שלי ?

ואגב שוב.... למגיב הראשון: אסור להשתמש בפונקציות הספריה: string.h אלא רק בבסיסי: stdio.h. :smile1:

פורסם

כן, ואיפה ראית שאמרתי להשתמש בפונקציות מ string.h ? אם כבר הייתי עושה איזה define פשוט ל tolower ומסיים עם הסיפור.

פורסם
  • מחבר

אם כבר הייתי עושה איזה define פשוט ל tolower ומסיים עם הסיפור.

מה הכוונה ? ;D :-\ :P

פורסם

חפש את המקרו tolower

פורסם

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

פורסם
  • מחבר

אתה יכול לתת לי דוגמא קטנה ? ;D

פורסם

A זה 1000001

a זה 1100001

....

Z זה 1011010

z זה 1111010

תמצא את החוקיות

פורסם

נחמד.

ארכיון

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

דיונים חדשים