פורסם 2010 בנובמבר 1615 שנים אני מחפש פונקציה שמקבלת מערך תווים עם רווחים וטאבים ומחזירה את אותו מערך ללא הרווחים והטאבים.אני מאמין שקיימת פונק' כזו באחד מקבצי ה-header הבסיסיים של השפה, רק שלא מצאתי אחת כזו...תודה !!
פורסם 2010 בנובמבר 1615 שנים למה שתהיה פונקצית ספריה כזו? זה דבר מאוד ספציפי.אבל אתה יכול מאוד בקלות לבנות כזו פונקציה בעצמך.(תשתמש בפונקציית הספריה isspace כדי לבדוק אם כל תו הוא רווח/טאב או לא)
פורסם 2010 בנובמבר 1615 שנים מחבר אז אם אני בונה אותה, אז האלגוריתם זה למעשה להריץ את isspace בלולאה על המערך ועבור כל איבר עד ההגעה ל- /0 שמוחזר לי עבורו 0 אני מעתיק אותו למערך חדש ששמתי בצד?אגב טאב ורווח, כ"א תופס מקום אחד במערך נכון?
פורסם 2010 בנובמבר 1715 שנים מחבר אז אם אני מכניס בלוק כזה:void func(char s[]){ int i,j,n; j[100]; for (i=0 ; s[i]!='/0' ; i++) { if (isspace(s[i]) ==0 ) { temp[j]=s[i]; j++; } } for (n=0 ; j[n]!='/0' ; n++) { printf("%c/t",j[n]); }}אז זה תקין בשביל נניח להדפיס אותה על המסך לאחר המיון? (בהנחה שאכן מערך לא עובר את הגודל המקס' של 100.) כלומר, הוא אכן יידע להציב את /0 במערך החדש בסוף התווים גם אם []s גודלו יהיה קטן מ-100 ?תודה
פורסם 2010 בנובמבר 1715 שנים קודם כל, הסלאשים שלך הפוכים (זה '0\' ולא '0/', לדוגמה), וחוץ מזה קראת למערך שלך פעם j ופעם temp (בנוסף למשתנה j שכבר מוגדר לך...)ולגבי שאלתך - לא יודע, למה שלא תבדוק בעצמך? תחשוב האם התוכן של הלולאה יתבצע באיבר האחרון במערך (זה ששווה ל-'0\').
פורסם 2010 בנובמבר 1715 שנים מחבר כתבתי את זה: #include <stdio.h>#include <ctype.h>#include <string.h>void funcc (char s[]){ int i,j,n; char temp[100]; for (i=0;s[i]!='\0';i++) { if ( ( isspace(s[i]) ) ==0 ) { temp[j]=s[i]; j++; } } for (n=0;temp[n]!='\0';n++) { printf("%c\t",temp[n]); }}int main(){ char arr[]="ab c dd"; funcc (arr);return 0;} וקיבלתי segmentation fault הפעם באמת לא עשיתי משהו שגוי....
פורסם 2010 בנובמבר 1715 שנים קודם כל, תדאג תמיד לאתחל את המשתנים שלך.וטעות שניה, מה עם תו הסיום של מחרוזת הפלט?
פורסם 2010 בנובמבר 1715 שנים מחבר אם אני מאתחל את i להיות 0 לפני הלולאה, אז בלולאה אני אשאיר את זה ככה:for ( ; s[i]!='\0' ; i++)? הרי אין טעם לאתחל פעמיים אותו משתנה באותו קטע קוד... הרי אורך החיים שלו בגלל ההגדרה שלו לפני הלולאה הוא כל הפונק'. או שהתכוונת גם להגדיר אותו וגם לאתחל אותו בתוך ה-for ?ובנוגע לתו הסיום של מחרוזת הפלט:הכוונה להריץ נניח counter שיספור כמה התקדמתי בהצבה במחרוזת ה"אינסופית" (גודל 100) שלי ובהצבה האחרונה +1 להכניס לו '\0' וככה אני לא אקבל את אותו error?
פורסם 2010 בנובמבר 1715 שנים התכוונתי למשתנה jזה לא משנה היכן מאתחלים, אבל לפני שימוש ראשון צריך לאתחל.את i אתה מאתחל בלולאה, ואין בעיה עם זה.אבל היכן את j?ואחרי הלולאה תוסיף temp[j]='\0';
פורסם 2010 בדצמבר 2414 שנים סליחה על ההקפצה...אבל, אם אני למשל לא יכולה להשתמש בisspace (לא שאני יודעת מה זה בככל), אני יכולה לעשות את אותו הדבר:לקלוט מחרוזת , ע"י לולאה לבדוק אם יש רווחים או טאבים (השאלה היא להשוות את זה למה? גם לאפס?) ואיפה שאין רווחים או טאבים עד '0\' להכניס למחרוזת אחרת שאני יוצרת? :s05:
פורסם 2010 בדצמבר 2414 שנים מחבר את יכולה לבדוק את קוד ה-ASCII של טאב \ רווח, לחילופין להכניס תחת מרכאות (לא כפולות) את הטאב בתנאי || עם הרווח.כמובן שהלולאה תסתיים ב-\0 מן הסתם.. ברור שניתן לעשות strlen אבל מיותר כי זה סתם לעבור על המערך פעם נוספת ללא צורך.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.