wstring

selalerer

New member
קצת אל תוך הקוד.

std::string אינו באמת מחלקה שנבנתה ככזאת, אלא מופע של template מסויים. הtemplate הזה נקרא basic_string והוא מממש פעולות של מחרוזת על טיפוס לא מוגדר (שזה משמעותה של template למעשה). הצורה שבה std::string מוגדר היא:
typedef basic_string<char> string;​
(שזה כמובן נמצא בתוך הnamespace std ולכן הstd) wstring מוגדר בצורה הזאת:
typedef basic_string<wchar_t,char_traits<wchar_t>,allocator<wchar_t>> wstring;​
אתה יכול לעשות עליו את כל הפעולות שאתה עושה על string רגיל, רק קח בחשבון שהוא אינו מורכב מcharים אלא מwchar_tים.
 

selalerer

New member
תיקון קטן:

זה:
typedef basic_string<wchar_t,char_traits<wchar_t>,allocator<wchar_t>> wstring;​
זה אותו דבר כמו זה (ע"פ ברירת מחדל הוא משתמש באותו טיפוס):
typedef basic_string<wchar_t> wstring;​
 

The Albatross

New member
אני היחיד שבעת שליחת הודעה

מקבל הודעת Object move ואז צריך לשלוח את ההודעה שוב?
 

selalerer

New member
../images/Emo32.gif אל תשלח שוב, תפתח בחלון נוסף

את הפורום ותראה אם ההודעה כבר שם. אם לא, אז תשלח שוב.
 

DadleFish

New member
wchar_t

הוא טיפוס משתנה שמכיל תווים שהם שני בתים או יותר (Wide) ולא בית אחד (ASCII). הנושא רחב מכדי לדבר עליו כאן. מומלץ שתקרא בספר של Jossutis - The C++ Standard library, אודות Locales וגם על strings.
 

The Albatross

New member
חיפשתי בגוגל,

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

The Albatross

New member
אוקיי, מצאתי.

אמממם. זה אומר שאני אצטרך לעשות לולאה שמעבירה תו תו מstring לwchar_t, ואז לעשות מזה wstring? אין דרך שפועלת על כל המערך?
 

The Albatross

New member
איך?

std::string str = "red"; std::wstring str2; for_each(str.begin(), str.end(),​
איך להמשיך מפה?
 

DadleFish

New member
במחשבה שניה,

for_each לא יעזור לך פה ממש. עדיף לולאה פשוטה שמעבירה מאחד לשני.
 

The Albatross

New member
עדיין לא עובד.

אני משתמש בלולאה הזאת:
std::string str = "red"; std::wstring ex; for (int i = 0; i < str.size(); i++){ ex = std::wcout.widen(str); }

אבל אני מקבל דבר כזה: red쳌쳌쳌쳌쳌
 

DadleFish

New member
מה אתה מתלונן, זה נראה ממש מגניב!

וברצינות, לא הקצית מקום בתוך ex. אתה סתם דורס זכרון, למעשה. תשתמש ב-resize על ex, עם הגודל של str כפרמטר.
 
למעלה