עבודה 5 - המרת קובץ הקוד למילים

מנהלים: TA_Isana, TA_Isana

שלח תגובה
JonathanS
הודעות: 12
הצטרף: 12:50 25/06/2009

עבודה 5 - המרת קובץ הקוד למילים

שליחה על ידי JonathanS » 12:55 25/06/2009

איך בדיוק אנחנו אמורים להמיר את הקובץ למילים בודדות?
מה שאני עשיתי הוא:

fileText = fileText.trim().toUpperCase();
fileText = fileText.replaceAll("[^A-Za-z]", " ");
String[] wordList = fileText.split("\\s+");

ורק אז הפעלתי את הפונקציהC על כל מילה בנפרד, הבעיה היא שמילים ארוכות מגיעות למקסימום של INT, מה אני אמור לעשות עם זה?

TA_Ariel
הודעות: 261
הצטרף: 00:53 23/04/2009

שליחה על ידי TA_Ariel » 14:27 25/06/2009

מילים מאד ארוכות,
תשתמשו בחישוב בmod 3571
כלומר לאחר כל צעד בחישוב תקחו את השארית מחלוקה ב3571
בצורה הזו לעולם לא תעברו את maxint.

JonathanS
הודעות: 12
הצטרף: 12:50 25/06/2009

שליחה על ידי JonathanS » 17:44 25/06/2009

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

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

TA_Ariel
הודעות: 261
הצטרף: 00:53 23/04/2009

שליחה על ידי TA_Ariel » 18:27 25/06/2009

הפיצול הוא לפי רווחים ,
האותיות שאין להם ערך הם לא מפרידות ערכם פשוט 0.

YossiCo
הודעות: 24
הצטרף: 19:20 17/12/2008
מיקום: ממש פה קרוב...

שליחה על ידי YossiCo » 18:49 25/06/2009

היי!
לגבי שארית החלוקה ב3571:
להפעיל אותה על הפונקציה P
או על C (התוצאה הסופית של C - לאחר הרקורסיה)

TA_Ariel
הודעות: 261
הצטרף: 00:53 23/04/2009

שליחה על ידי TA_Ariel » 19:08 25/06/2009

על P כי גם בחישוב עצמו המחוברים לא יכולים לעבור את maxint

roni
הודעות: 38
הצטרף: 18:17 28/12/2008

שליחה על ידי roni » 17:54 27/06/2009

יונתן אתה יכול בבקשה להסביר יותר מה רשמת למעלה ומה כל פקודה עושה????
ולמה רשמת
String[] wordList = fileText.split("\\s+");
כלומר מה ה
\\s+
מסמן?

JonathanS
הודעות: 12
הצטרף: 12:50 25/06/2009

שליחה על ידי JonathanS » 18:20 28/06/2009

השורה שאלה התייחסת מחלקת את המחרוזת לחלקים על פי רווחים.

כחול
הודעות: 34
הצטרף: 23:45 25/11/2008

שליחה על ידי כחול » 15:43 29/06/2009

TA_Ariel כתב:מילים מאד ארוכות,
תשתמשו בחישוב בmod 3571
כלומר לאחר כל צעד בחישוב תקחו את השארית מחלוקה ב3571
בצורה הזו לעולם לא תעברו את maxint.
מה מיוחד ב-3571?
למה להשתמש במודולו שלו?

TA_Ariel
הודעות: 261
הצטרף: 00:53 23/04/2009

שליחה על ידי TA_Ariel » 17:20 29/06/2009

שאלה מצויינת ,
יש שלוש סיבות
1. 3571 ראשוני
2. הוא קטן משורש maxint
3. נובע מ1 : הסיכוי שלשני מספרים מודולו ראשוני יהיה אותה שארית הוא קטן.

roni
הודעות: 38
הצטרף: 18:17 28/12/2008

שליחה על ידי roni » 22:54 29/06/2009

אפשר בבקשה להסביר מה ההבדל בין:

String[] wordList = fileText.split("\\s+");
לבין
String[] wordList = fileText.split("\\s");
כלומר
"\\s"
לבין
"\\s+"
בסוגריים

JonathanS
הודעות: 12
הצטרף: 12:50 25/06/2009

שליחה על ידי JonathanS » 01:22 30/06/2009

עקרונית זה לא בחומר של הקורס, אבל split מקבל תבנית של משהו שנקרא regex (regular rexpression):
\\s+ אומר תפצל לפי רווח אחד או יותר, כלומר אם יופיעו רווח, אחד שניים עוקבים, שלושה עוקבים וכו' הוא יתייחס לזה כרווח אחד ויפצל לפי זה. אם מורידים הפלוס הכוונה לרווח אחד בודד ולכן זה לא מתאים במקרה שלנו.

orankap
הודעות: 67
הצטרף: 14:23 02/12/2008

שליחה על ידי orankap » 10:19 30/06/2009

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

roni
הודעות: 38
הצטרף: 18:17 28/12/2008

שליחה על ידי roni » 18:17 30/06/2009

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

orankap
הודעות: 67
הצטרף: 14:23 02/12/2008

שליחה על ידי orankap » 18:58 30/06/2009

ולמה אני לא חשבתי על זה?:oops:
תודה רבה :D

שלח תגובה

חזור אל “- מבני נתונים”