PDA

View Full Version : جدا کردن قسمت های مورد نیاز از رشته



mohammadali1375
شنبه 22 تیر 1392, 00:52 صبح
اول از همه سلام :لبخندساده:
میخاستم ببینم چطوری میتونم تو یک همچین رشته ای قسمت هایی که میخام رو جدا کنم. مثلا فرض کنید یک رشته دارم که چاپ کردنش همچین نتیجه ای میده :

(0)(0):{100&100,0,100,100};
(1)(0):{100&200,45,100,100};
(2)(1):{300&300,0,100,100};
میخاستم قسمتایی که میخام رو از این رشته جدا کنم و جدا جدا بهشون دسترسی داشته باشم.
یعنی مثلا تو خط سوم بتونم همه اعداد 2 , 1 , 300 , 300 , 0 , 100 , 100 رو که توی این رشته اومده به صورت جدا جدا توی متغیر هایی ذخیره کنم. در کل اعداد این متن ( یا شاید در مواردی رشته هایی از این متن‌ ) رو استخراج کنم. سعی کردم با توابع موجود در string‌ اینکارو اجام بدم ولی خیلی سخت میشد واقعا (‌با توابعی که من ازش میشناختم ) .
البته این نکته رو هم بگم که اگه دقت کنید ساختار رشته یک چیز ثابته در هر خط و فقط مقادیر تغیر کرده
اگه هم این راه نمیشه چجوری میشه اطلاعات رو دسته بندی کنم و ذخیره و استفاده کنم غیر فایل متنی که الان این کارو کردم ( و غیر از استفاده از پایگاه داده ). با XML میشه ؟ و اگه میشه چجوری باید بخونمش ؟ (کتابخونه یا چیز دیگه ای هست معرفی کنید ممنون میشم )

hadi0x7c7
شنبه 22 تیر 1392, 04:01 صبح
شما کافیه از تابع sscanf استفاده کنی:
#include <iostream>

using namespace std;

int main() {
char s[] = "(2)(1):{300&300,0,100,100};";
int a, b, c, d, e, f, g, h;
sscanf(s, "(%d)(%d):{%d&%d,%d,%d,%d};",&a, &b, &c,&d,&e, &f, &g, &h);

printf("%d\n%d\n%d\n%d\n%d\n%d\n%d\n", a, b, c, d, e, f, g, h);

}

mohammadali1375
شنبه 22 تیر 1392, 17:25 عصر
ایول دمت گرم. :لبخندساده:

mohammadali1375
یک شنبه 23 تیر 1392, 01:06 صبح
حالا یه چیز جدید :لبخند:
چرا وقتی میخام قسمت های این رشته رو جدا کنم اشتباه میشه :‌

(0):{Box0.jpg,Box0,0,Noting};
الان میخام 0 رو به عنوان یک عدد صحیح Box0.jpg رو به عنوان یک رشته , Box0 هم به عنوان یک رشته , 0 عدد صحیح , Noting هم یک رشته جدا کنم نمیشه درست اینکارو کرد ( مال رشته هاست چون وقتی فقط عدد باشه مشکل نیست )
این کارو اینجوری میکنم :
sscanf(&aString[i][0],"(%d):{%s,%s,%d,%s};",&num0,name0,name1,&num1,name2);
( نمیدونم چرا تو پست بین e2 و nam فاصله می افته )
ولی نتیجه اینشکلی میشه :

num0 = 0
name0 = Box0.jpg,Box0,0,Noting);
name1 = Box0.jpg,Box0,0,Noting);
num1 = 2001026682
name2 = Box0.jpg,Box0,0,Noting);

hadi0x7c7
یک شنبه 23 تیر 1392, 04:03 صبح
شما با تابع scanf همه کاری میتونی بکنی فقط کافیه یکم سرچ کنی !
char s[] = "(0):{Box0.jpg,Box0,0,Noting};";
int zero;
char a[100];char b[100];char c[100];
int se;
sscanf(s, "(%d):{%[^,],%[^,],%d,%[^,}\n]};",&zero, a,b,&se, c);

cout << zero << endl;
cout << a << endl;
cout << b << endl;
cout << se << endl;
cout << c << endl;

خروجی:

0
Box0.jpg
Box0
0
Noting