פורסם 2010 באוגוסט 1315 שנים תודה מראש1. אם למשל אני מכניס מילה ע"י המקלדת ואני לא יודע מה יהיה גודלה של המילה (מסוג char) אז איך אני מגדיר את המשתנהלמשל אם אגדירchar i [20] ואז אני יכניס מילה שהיא קטנה מ20 אז אני סתם מבזבז מקום בזיכרון, יש דרך להכניס מילה ואז לפי גודל המילה כך יקבע הגודל של המערך i??2.קיימות 2 מילים..אני לא יודע מה גודלם...ואני צריך להשוות ביניהם..ואם המילה הראשונה גדולה מהמילה השניה יחזור מספר שלילי, אם המילה השניה גדולה מהמילה הראשונה יחזור מספר חיובי, אם הם שוות יחזור אפס.כלומר נגיד מילה ראשונה זה "cup" ומילה שניה זה "police" אז אני משווה בין c לp ואכן p יותר גדול מc אז אני צריך להחזיר מספר חיובי וכן הלאה..איך אני כותב את זה בשפת c?תודה רבה לכל המבינים
פורסם 2010 באוגוסט 1315 שנים 1. למדת על מערכים דינמיים (malloc/free או new/delete)? אם לא, אז חכה שתגיע לנושא הזה ואז תדע. בינתיים תצטרך להסתפק במערכים בגודל קבוע.2. מה שאתה מחפש נקרא strcmp. יש מקומות ברשת שמסבירים איך לממש אותה, אבל בהנחה שנתנו לך את זה בתור תרגיל, המימוש צריך להיות לולאה פשוטה שעוברת על שתי המחרוזות במקביל.
פורסם 2010 באוגוסט 1315 שנים לפותח הדיון, בנימה פילוסופית: כדי "להכניס" מילה אתה צריך שהיא תישמר איפשהו - בזיכרון, בין אם מדובר בזיכרון שאתה מקצה עם מערך או ב buffer של המקלדת. לכן תמיד תהיה הקצאה ראשונית של זיכרון בגודל כלשהו כדי להתחיל בכלל לקלוט. בנוסף, אין דרך ידועה ומהימנה לחזות את העתיד לכן צריך הקצאה דינמית או, יותר סביר, הגבלת המשתמש בגודל הקלט שהוא יכול להזין.ובנימה פרקטית: אלא אם אתה עובד במערכת embedded שבה כל בייט חשוב או שזו דרישה כתרגיל אקדמי גרידא - אתה באמת חושב שכמה (מאות\אלפי) בייטים של זיכרון ש"בוזבז" ישנו משהו?
פורסם 2010 באוגוסט 1315 שנים גם שימוש באלה לא יפתור את הבעיה שכן צריך לקלוט את גודל המילה לפני שאפשר להקצות זיכרון, אלא אם כן אתה מתכוון לקלוט את כל המילה ל linked list של char... לא בדיוק פתרון אלגנטי מבחינת זיכרון (או בכלל).מה? ממש לא נכון. יוצרים מערך בגודל מסויים (נניח 100), וקוראים עד 100 תווים מהקלט. אם יש עוד קלט, מקצים את המערך מחדש (באמצעות realloc, לדוגמה) בגודל יותר גדול (נניח פי 2) וממשיכים לקרוא עד שהמערך שוב מתמלא, או שהקלט מסתיים. ממשיכים עם התהליך (ככה שכל פעם מגדילים את המערך פי 2). בסוף מקבלים מערך שגדול יותר מאורך המחרוזת - אז שוב מקטינים את גודלו בהתאם לאורך המחרוזת (שוב באמצעות realloc). יעיל מבחינת זכרון, ואפילו מבחינת זמן (באופן אסימפטוטי).הנ"ל כמובן בהנחה שאתה עובד ב-C. אם אתה עובד ב-++C, אז אתה יכול להשתמש ב-string (שמנהל את כל ענייני הזכרון עבורך) ובפונקציה getline.
פורסם 2010 באוגוסט 1415 שנים שניצל, תסתכל על זמני העריכות שלנו... הבנתי שלזה התכוונת ולכן ערכתי את ההודעה שלי.
פורסם 2010 באוגוסט 1415 שנים מחבר אוקיאיך אני משתמש בפקודה השמורה strcmp??אני רושם strcmp(char s1[],char s2[]))ואיזה מספר שלילי זה מחזיר במידה וs2 גדול מs1?-10?-1? איזה שלילי זה מחזיר?עוד שאלה פשוטהאם הגדרתי v[]={5,4,7}וכאשר אני כותבcout<<vמה זה מוציא לי? את הכתובת של v? או את המשתנה 5?תודהנ.באתם יכולים לתת לי דוגמא לstrlenבשתי שורות..תגידו לי אם זה נכון במקרה שלי לתוך a יכנס 3?..כלומר האורך של v? כתבתי את זה נכון?v[]={5,4,7}a=strlen(v)
פורסם 2010 באוגוסט 1415 שנים א. strcmp היא לא "פקודה שמורה" (למעשה, יש מעט מאוד מילים שמורות בשפה), זו פשוט פונקציה שמוגדרת בספריות הסטנדרטיות של C. איך להשתמש בה? חפש בגוגל, תמצא מיליארד דוגמאות. לגבי ערך ההחזרה - אתה לא יכול לדעת איזה ערך שלילי מוחזר, פשוט כי זה לא מוגדר בתקן. יכול להיות שמימוש אחד יחזיר תמיד 1-, ומימוש אחר יחזיר כל פעם ערך אחר (אבל כאמור תמיד שלילי).ב. למה שלא תנסה ותאמר לנו?ג. strlen עוד על מערכים של תווים (char). איך משתמשים בה ומה היא עושה - ראה א'.
פורסם 2010 באוגוסט 1515 שנים מחבר בקשר לא.כתבתי פקודות אבל אני לא מצליח לראות את הפלט אם זה מספר שלילי או חיובי או 0, איזה פקודה אני צריך לרשום כדי לראות את הפלט?זאת התוכנית אני מכניס מילה לa ומילה לc#include <cstdlib>#include <iostream>using namespace std;int main(int argc, char *argv[]){ int b; char a[100]; char c[100];cin >> a >> c ; int strcmp(const char a, char c) ; system("PAUSE"); return EXIT_SUCCESS;}איך אני יכול לראות את המספר השלילי החיובי או אפס על המסך??תודהנ.בניסיתי לכתוב ככה כדי לראות את הפלט על המסך אך הקומפיילר אמר שיש שגיאה בשורה של ה strcmp כאילו הb= הוא לא חוקיכאילו רציתי להכניס את מה שחוזר לתוך משתנה b אך קיבלתי שגיאה, איך בכל זאת אני יכול לראות את ההחזרה?b = int strcmp(const char a, char c) ; cout << b ;
פורסם 2010 באוגוסט 1515 שנים קודם כל, כשאתה כותב כאן קוד, אל תשתמש בתגית יישור לשמאל, אלא בתגית קוד (כפתור # ליד הכפתור של הציטוט).לגבי שאלתך - אתה לא משתמש נכון ב-strcmp. כמו שאמרתי, חפש בגוגל, יש הרבה דוגמאות לשימוש נכון.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.