PDA

View Full Version : خواندن از متغیر رشته ای تا اولین space



M.K_Soft
جمعه 17 آذر 1391, 21:15 عصر
سلام دوستان.
من دو متغیر رشته ای دارم با نام str1 و str2.
حالا می خوام در str2 از str1 تا زمانی بنویسم که به space نرسیده.



string str1 = "Ali 56676 ahjhg";
string str2 = .... ;// it should contain Ali

aidinMC
جمعه 17 آذر 1391, 21:32 عصر
سلام
کد اسکی فاصله 32 هستش بصورت زیر کار کن

int i=0;
while (str1[i] != 32) {
str2[i] = str1[i];
i++
}

omidshaman
جمعه 17 آذر 1391, 21:37 عصر
این کد شما کار نمی کنه aidinMC
اینا string هستن نه array !
درستش میشه این!

int i=0;
while (str1[i] != 32) {
str2.resize(i+1);
str2[i] = str1[i];
i++;
}
البته من پیشنهاد می کنم از این روش استفاده کنی

string str1 = "Ali 56676 ahjhg";
int end=str1.find (' ');
string str2 = str1.substr (0, end);

aidinMC
جمعه 17 آذر 1391, 21:50 عصر
این کد شما کار نمی کنه aidinMC
اینا string هستن نه array !
درستش میشه این!

بله حق با شماست هواسم نبود :)

M.K_Soft
شنبه 18 آذر 1391, 20:59 عصر
ممنون از پاسختون.
یه سوال دیگه:
اگر بخوام بدونم که تا الان چند تا space توی خطم جلو رفتم باید چکار کنم؟
مثلا تو همون مثال اول، بخونم تا ببینم به کدوم space رسیدم و حرف های جلوش رو تا space بعدی تو یه متغیر دیگه بریزم.
مثلا:

string str1 = "Ali 56676 ahjhg";
int spc = 0;
{
spc = ... // Count Spaces
if spc = 1
// string tmp = ahjhg
// tmp hould be: ahjhg
}

aidinMC
شنبه 18 آذر 1391, 21:38 عصر
برای با ردوم این کارو انجام بده :

string str1 = "Ali 56676 ahjhg";
int start = end;
int end=str1.find (' ', end);
string str2 = str1.substr (start, end);

omidshaman
شنبه 18 آذر 1391, 21:55 عصر
البته اینم باز اشتباهه
str1.substr (start, end);
میاد به اندازه تعداد end از str1 از کاراکتر start به بعد کاراکتر می گیره میزاره تو str2که خوب تو این الگوریتم شما مثلا end میشه 9 و start میشه 4 که خوب تا j کاراکتر می گیره که اون چیزی که ما می خوایم نیست!
اگر بزاری

tring str2 = str1.substr (start, end-start);
درست میشه
در ضمن تو خط 3 هم باید end+1 باشه ...

aidinMC
شنبه 18 آذر 1391, 22:05 عصر
البته اینم باز اشتباهه


بــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــله ، حاصل پاسخ با عجله.... :لبخند:

M.K_Soft
دوشنبه 20 آذر 1391, 22:46 عصر
یه سوال دیگه هم هست!
شرمنده اگه یکجا ننوشتم چون در طول نوشتن برنامه باهاشون مواجه می شم.
سوال از این قراره که:
یه فایل دارم شامل اطلاعات زیر:

a d g
b e h
c f i
به عنوان مثال!
حالا من از ابتدا شروع کردم و دنبال فرضا "h" گشتم و در خط دوم پیداش کردم.
حالا می خوام توی همون خط به اول خط بیام تا باقی داده هایش رو هم بخونم.
دستوری مثل
file.seekg(0,ios::// beginning of the current line
نداریم برای این کار؟

omidshaman
دوشنبه 20 آذر 1391, 23:40 عصر
میشه با seekg رفت خط اول بعد با


string str;
getline (a,str);
یا
a.ignore(256,'\n');
رفت خط بعد
یامستقیما با
seekg
این کارو کرد چون به نظر میرسه فایل شما تعداد حروف هر خطش مساویه

M.K_Soft
سه شنبه 21 آذر 1391, 13:14 عصر
میشه با seekg رفت خط اول بعد با


string str;
a.getline (a,str);
یا
a.ignore(256,'\n');
رفت خط بعد
یامستقیما با
seekg
این کارو کرد چون به نظر میرسه فایل شما تعداد حروف هر خطش مساویه

نه دوست عزیز، رشته های هر سطر در فایل یه اندازه نیست.
من فقط دنبال یه دستور می گردم که بهش بگم الان پوینتر فایلم رو ببر به اول یه سطر خاص مثلا بهش بگم پوینتر فایل رو ببر اول خط 4.

omidshaman
سه شنبه 21 آذر 1391, 13:32 عصر
یک فانکشن بساز تعداد خط ها رو بگیره پوینتر رو ببره اول فایل بعد اندازه تعدادخط ها از getline استفاده کنه!!

M.K_Soft
سه شنبه 21 آذر 1391, 14:56 عصر
یک فانکشن بساز تعداد خط ها رو بگیره پوینتر رو ببره اول فایل بعد اندازه تعدادخط ها از getline استفاده کنه!!

ممنون از پاسخت.اما اگر من از getline استفاده کنم، مجبورم دوباره توی متغیری که کل خط رو ریختم، با رسیدن به هر space مقدار قبلش رو بریزم توی یه متغیر که
وقتی من دارم از تابع خوندن فایل استفاده می کنم مثلا می گم
file >> var
خودش تا اولین فاصله رو میخونه و میریزه توی متغیر.
کار با آرایه ی رشته ای حوصله بره و زمانبر البته پس فکر میکنم بیشتر به صرف باشه که پوینتر رو ببرم اول خط و یکی یکی بخونم و برم تا انتهای خط.