עבור לתוכן

פירוק מחרוזת לתת-מחרוזות לפי סימן מוגדר.

Featured Replies

פורסם

חברים, האם יש פונקציה ב++C שמקבלת מחרוזת ומפרקת אותה למילים לפי סימן כלשהו?

יש לי קלט שאני אמור לקבל מהצורה הבאה:

<Type> <name> <num> ...

וכך הלאה. כל מילה מופרדת ע"י רווח ו < >.

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

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

ולשלוח את כל המידע לCTOR.

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

היא מילה אחרת למשל? או כל סוג של פעולה אחרת?

פורסם

קודם כל, מה שאתה מחפש נקרא Tokenizer.

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

http://www.cppreference.com/wiki/c/string/strtok

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

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

http://www.oopweb.com/CPP/Documents/CPPHOWTO/Volume/C++Programming-HOWTO-7.html

חיפוש של C++ Tokenizer בגוגל ימצא לך עוד הרבה דוגמאות קוד או חבילות.

פורסם

הנה משהו שחפרתי באינטרנט ונראה לי סביר.


int main()
{
std::string token, text("Here:is:some:text");
std::istringstream iss(text);
while ( getline(iss, token, ':') )
{
std::cout << token << std::endl;
}
return 0;
}

פורסם
  • מחבר

תודה רבה חברים. כנראה שאממש את זה ידנית.

אסור להתעסק עם string, רק עם char *.

תודה רבה על העזרה :)

ארכיון

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

דיונים חדשים