ورود

View Full Version : کار با فایل وپردازش رشته



nima_joon
شنبه 08 دی 1386, 01:15 صبح
سلام
من از کتابخانه fstream برای کار با فایل استفاده می کنم مشکلم اینه که برای خوندن هر خط با getline باید نتیجه رو توی یک داده از نوع string نگه دارم ولی توابع دیگه مثل strcmpاز نوع داده char*استفاده می کنند. در نتیجه نمی تونم خطوط فایلم را با توابع دیگه پردازش کنم

emad_67
شنبه 08 دی 1386, 09:30 صبح
به جای strcmp باید از تابع compare خود شی string استفاده کنی مثلا:


string a,b;
a="abcd";
b="efgh";
if(a.compare(b)<0)
cout<<a;

تابع compare هم مثل strcmp در صورتی که رشته ایی که به تابع میفرستی یعنی b کوچکتر از a باشه مقدار کمتر از 0 و در صورت بزرگتر بودن مقدار بیشتر از صفر و در صورت مساوی بودن 0 رو بر می گردونه

nima_joon
شنبه 08 دی 1386, 17:46 عصر
ممنون ولی فقط این نیست مثلا فرض کنید من یک خط از فایل خوندم و در string line ریختم
line="g130 =DFF (g90) " l حالا می خواهم اگر کلمه DFF توی این خط بود از اول خط تا مساوی رو جایی ذخیره کنم کاری که کردم این بوده :

getline(myfile,line); //z
found=line.find("DFF"); //z
if (found!=string::npos) //z
found-=2; //z }
length=line.copy(buf,found-line.begin(),line.begin()); //z
buf[length]='\0'; //z
cout<< buf ; //z
nff++; //z
}


ولی پیداست که نمی تونم از متد copy() با این روش استفاده کنم

emad_67
شنبه 08 دی 1386, 20:19 عصر
به این شکل بنویس:


string a,b;
char buff[20];
a="test string";
b="string";
int x=a.find(b);
int y=a.copy(buff,x-1,0);
buff[y]='\0';
cout<<buff<<endl;
این قسمتی که نوشتی اشتباه هست:


line.copy(buf,found-line.begin(),line.begin())
تابع ها begin و end اشاره گر هایی به ابتدا و انتهای رشته بر میگیردونن و نباید اونا رو به تابع copy بدی. تابع copy دو پارامتر آخرش عدد هستند.

nima_joon
شنبه 08 دی 1386, 20:56 عصر
ممنونم که حوصله کردی موفق باشید

amir_cpp
یک شنبه 09 دی 1386, 11:31 صبح
من هم یک کد نوشتم، ببین به درد می خوره:


#include<iostream>
#include<string>

using namespace std;

void main()
{
char *str="DFF123=bss321";
char *find="=";
char *found=""; // If found 'find', it will be stored here.
char dest[100].=""; // We'll copy result into this var.
int pos=-1; // For storing position of '='

found=strstr(str,find);
pos=(int)(found-str+1);
if (pos>-1)
{
//dest=new char*;
strncpy(dest,str,pos-1);
}
cout << dest;
cin.get();
}