PDA

View Full Version : مقایسه دو رشته



nimja145
شنبه 06 شهریور 1389, 20:03 عصر
سلام
چه طور میتونم دو تا متغیر از نوع string را با هم مقایسه بکنم؟(از نظر ترتیب الفبایی)



#include <iostream.h>
#include <cstring.h>
int main()
{
string a[2];
for (int i=0;i<2;i++)
cin>>a[i];
}

Salar Ashgi
شنبه 06 شهریور 1389, 20:46 عصر
سلام ، منظورتون رو از ترتیب حروف الفبایی واضحتر مطرح کنید./
ولی این نمونه خوبیه !
http://www.cplusplus.com/reference/string/string/compare/

nimja145
شنبه 06 شهریور 1389, 20:52 عصر
میخوام که لیستی از نام افراد رو بر حسب حروف الفبا مرتب کنم.این جا برای اینکه ساده بشه 2 مورد گذاشتم تا با مقایسه بگه که اول کدوم اسم باید باشه

Salar Ashgi
شنبه 06 شهریور 1389, 21:16 عصر
میخوام که لیستی از نام افراد رو بر حسب حروف الفبا مرتب کنم.این جا برای اینکه ساده بشه 2 مورد گذاشتم تا با مقایسه بگه که اول کدوم اسم باید باشه

میتونید خیلی ساده از وکتورها استفاده کنید و متود Sort آنرا فراخوانی کنید .

یه مثال ساده میزنم :



#include <iostream>
#include <conio>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main(){
vector<string> list;
list.push_back("mohsen");
list.push_back("reza");
list.push_back("salar");
list.push_back("ali");
sort(list.begin(),list.end());
for(int i=0;i<list.size();i++)
cout<<list[i]<<endl;
getch();
}

خروجی :
ali
mohsen
reza
salar

موفق و پیروز باشید ./

nimja145
شنبه 06 شهریور 1389, 21:27 عصر
ولی خط سوم کد شما (سرفایل vector) نمیشناسه.
ثانیا استاد تاکید بر این داره که از آرایه استفاده بشه

Salar Ashgi
شنبه 06 شهریور 1389, 22:18 عصر
ولی خط سوم کد شما (سرفایل vector) نمیشناسه.

احتمالا مشکل از کامپایلرتان خواهد بود ...


ثانیا استاد تاکید بر این داره که از آرایه استفاده بشه

حتما میدانید که درخواست انجام تمرینهای دانشجویی و درخواست صریح کد ممنوع است و من صرفا
جهت راهنمایی کدی ارائه دادم ،پس شما خودتون با آرایه بنویسید و اشکالاتتون رو مطرح کنید ./

موفق باشید ./

nimja145
شنبه 06 شهریور 1389, 22:51 عصر
احتمالا مشکل از کامپایلرتان خواهد بود ...

حتما میدانید که درخواست انجام تمرینهای دانشجویی و درخواست صریح کد ممنوع است و من صرفا
جهت راهنمایی کدی ارائه دادم ،پس شما خودتون با آرایه بنویسید و اشکالاتتون رو مطرح کنید ./

موفق باشید ./
من هم راهنمایی خواستم.پست اول من هم به اگر دوباره ببینید فقط راهنمایی خواستم که چه طور میشه مقایسه کزد و کارهای مرتب سازی بعد از مقایسه رو سوال نکردم (حتی سعی کردم که مثال کوچکی تهییه کنم تا بر اساس اون راهنمایی کنید.)

بعدش این فقط قسمتی از کل برنامه هست که قراره بنویسم (البته نوشتم فقط این قسمتش مونده)

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

رابعا در سایت های خارجی یک جستجو داشتم.یک مثال پیدا کردم که چکیدش این میشه که خلاصه نوشتم:


#include <iostream.h>
#include <cstring.h>
int main()
{
string a[2];
cin>>a[0];
cin>>a[1];
if (a[0]>a[1])
cout<<"a[0]<a[1]";
else cout<<"a[0]>a[1]";
}


به نظر شما این روش درست جواب میده؟

طاعات و عباداتتون قبول درگاه حق

Salar Ashgi
شنبه 06 شهریور 1389, 23:00 عصر
من هم راهنمایی خواستم

تو متن سوالتون که این آشکار نیست ./



بعدش این فقط قسمتی از کل برنامه هست که قراره بنویسم (البته نوشتم فقط این قسمتش مونده)


پس باید کلشو بذارید اگه نوشتیدش ، وگرنه درست راهنمایی نمیشید !



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

ما هم گفتیم شما خودتون بسم الله ... رو بگید و دست بکار بشید و بعد سوال کنید ./

ثانیا این کدی که شما نوشتید هیچ مفهوم خاصی نداره ، همون بهتر که کل کدتون رو که به این بحث
مرتب سازی مربوط میشه ، بذارید ./

یه راهنمایی ساده : توسط متود Compare کلاس String.h یا خیلی ساده خودتون اول باید یه متود طراحی
کنید که دو رشته رو مقایسه کنه (از نظر الفبایی) و بعد نتیجه رو برگردونه (حالا مثلا بصورت int) ، بعد
میتونید از روشهای مرتب سازی معمولی که هست Bubble Sort , Selection Sort , Insertion Sort و ...
استفاده کنید ، به همین سادگی ... دیگه پیاده سازی کد با خودتان !
موفق باشید ./

sh4mid
یک شنبه 07 شهریور 1389, 14:35 عصر
سلام
ببین این به دردت می خوره


// lexicographical_compare example
#include <iostream>
#include <algorithm>
#include <cctype>
using namespace std;

// a case-insensitive comparison function:
bool mycomp (char c1, char c2)
{ return tolower(c1)<tolower(c2); }

int main () {
char first[]="Apple"; // 5 letters
char second[]="apartment"; // 9 letters

cout << "Using default comparison (operator<): ";
if (lexicographical_compare(first,first+5,second,seco nd+9))
cout << first << " is less than " << second << endl;
else
if (lexicographical_compare(second,second+9,first,fir st+5))
cout << first << " is greater than " << second << endl;
else
cout << first << " and " << second << " are equivalent\n";


cout << "Using mycomp as comparison object: ";
if (lexicographical_compare(first,first+5,second,seco nd+9,mycomp))
cout << first << " is less than " << second << endl;
else
if (lexicographical_compare(second,second+9,first,fir st+5,mycomp))
cout << first << " is greater than " << second << endl;
else
cout << first << " and " << second << " are equivalent\n";

return 0;
}

این تابع یا آلگوریتم lexicographical_compare همونطور که از اسمش پیداست براساس الفبایی می تونه دو تا رشته رو مقایسه کنه


Returns true if range [first1,last1) compares lexicographically less than the range [first2,last2).

اینجا رو ببین (http://www.cplusplus.com/reference/algorithm/lexicographical_compare)

Salar Ashgi
یک شنبه 07 شهریور 1389, 14:53 عصر
sh4mid (http://www.barnamenevis.org/forum/member.php?u=35307) عزیز ، ممنون از حسن نیت شما ، ولی ما در اینجا جمع شده ایم بجای ماهی دادن ، ماهی گیری
را یاد دهیم ، ارائه کد آماده تنها دوستمون رو از خلاقیتی که باید از خودشون جهت نوشتن کد نشون بدن ،
باز میدارد !

nimja145
یک شنبه 07 شهریور 1389, 18:24 عصر
سلام
ببین این به دردت می خوره


// lexicographical_compare example
#include <iostream>
#include <algorithm>
#include <cctype>
using namespace std;

// a case-insensitive comparison function:
bool mycomp (char c1, char c2)
{ return tolower(c1)<tolower(c2); }

int main () {
char first[]="Apple"; // 5 letters
char second[]="apartment"; // 9 letters

cout << "Using default comparison (operator<): ";
if (lexicographical_compare(first,first+5,second,seco nd+9))
cout << first << " is less than " << second << endl;
else
if (lexicographical_compare(second,second+9,first,fir st+5))
cout << first << " is greater than " << second << endl;
else
cout << first << " and " << second << " are equivalent\n";


cout << "Using mycomp as comparison object: ";
if (lexicographical_compare(first,first+5,second,seco nd+9,mycomp))
cout << first << " is less than " << second << endl;
else
if (lexicographical_compare(second,second+9,first,fir st+5,mycomp))
cout << first << " is greater than " << second << endl;
else
cout << first << " and " << second << " are equivalent\n";

return 0;
}

این تابع یا آلگوریتم lexicographical_compare همونطور که از اسمش پیداست براساس الفبایی می تونه دو تا رشته رو مقایسه کنه


اینجا رو ببین (http://www.cplusplus.com/reference/algorithm/lexicographical_compare)

ممنون . ولی در برنامه وقتی دو رشته رو مقایسه کردم ، جواب خودم رو گرفتم و اونو به ترتیب الفبا نشون داد


sh4mid (http://www.barnamenevis.org/forum/member.php?u=35307) عزیز ، ممنون از حسن نیت شما ، ولی ما در اینجا جمع شده ایم بجای ماهی دادن ، ماهی گیری
را یاد دهیم ، ارائه کد آماده تنها دوستمون رو از خلاقیتی که باید از خودشون جهت نوشتن کد نشون بدن ،
باز میدارد !

دوست عزیز به یاری خدا این برنامه رو تموم کردم. باز هم گفتم که من فقط بخشی از برنامه رو راهنمایی خواستم . ولی چه فایده به جای اعتماد به همدیگه ، باید حتما مدرکی نشون بدیم. نمیخواستم برنامه رو بزارم چون حق اینو دارم که این برنامه پیش خودم محفوظ بمونه ، هرچند ناقص و بی ارزش باشه ) . ولی فقط برای اینکه از خودم دفاع کنم وهم اینکه بقیه دوستان شاید از این روش مقایسه استفاده کنند (که خیلی راحت هست) این برنامه رو میذارم و این هم آخرین پست من تو این تاپیک هست.
موفق و موید باشید



#include<iostream.h>
#include<cstring.h>
#include<conio.h>
void namesort();
void sortdate();
void show();
const size=2;
string name[size];
int sal[size];
int mah[size];
int roz[size];
int main()
{
int i;
clrscr();
for(i=0;i<size;i++)
{
cout<<"plz enter name (number "<<(i+1)<<" ):";
cin>>name[i];
cout<<"plz enter date - year- (number "<<(i+1)<<" ):";
cin>>sal[i];
cout<<"plz enter date - month- (number "<<(i+1)<<" ):";
cin>>mah[i];
cout<<"plz enter date - day- (number "<<(i+1)<<" ):";
cin>>roz[i];
}

while(1)
{ clrscr();
cout<<"press 1 to sort by name \n press 2 to sort bye date \n press 3 to serach by name \n press 4 to exit \n";
char x;
x=getch();
switch(x)
{case'1':
{clrscr();
namesort();
show();
break;
}
case'2':
{clrscr();
sortdate();
show();
break;
}
case'3':
{ clrscr();
cout<<"plz enter name:" ;
string index;
cin>>index;
for (i=0 ; i<=size ; i++)
if (name[i]==index)
{ cout<<"date = "<<sal[i]<<"\\" <<mah[i]<<"\\" <<roz[i]<<"||"<<((mah[i]-1)*30)+roz[i]<<" Days to birth (base 89/1/1) \n" ;
cout<<"days= " <<((1389-sal[i])*365)+((mah[i]-1)*30)+ roz[i]<<"\n";
cout<< "month= " <<((1389-sal[i])*12)+(mah[i]-1)<<"\n";
cout<<"year= "<<(1389-sal[i]);
break;
}
else {cout<<"not found";}
break;
}
}
if (x=='4') break;
getch();
}
return 0;
}
void namesort()
{
int i;
string Temp;
int t;
for(i=0;i<size;i++)
for(int j=i+1;j<size;j++)
if(name[i]>name[j])
{
Temp=name[i];
name[i]=name[j];
name[j]=Temp;
t=sal[i];
sal[i]=sal[j];
sal[j]=t;
t=mah[i];
mah[i]=mah[j];
mah[j]=t;
t=roz[i];
roz[i]=roz[j];
roz[j]=t;
}
}
void show()
{
for (int i=0;i<size;i++)
cout<<name[i]<<" "<<sal[i]<<"\\" <<mah[i]<<"\\" <<roz[i]<<"\n";
}
void sortdate()
{
int i;
string Temp;
int t;
for(i=0;i<size;i++)
for(int j=i+1;j<size;j++)
{ if(sal[i]>sal[j])
{
Temp=name[i];
name[i]=name[j];
name[j]=Temp;
t=sal[i];
sal[i]=sal[j];
sal[j]=t;
t=mah[i];
mah[i]=mah[j];
mah[j]=t;
t=roz[i];
roz[i]=roz[j];
roz[j]=t;
}

else if (sal[i]==sal[j])
if ( mah[i]>mah[j])
{
Temp=name[i];
name[i]=name[j];
name[j]=Temp;
t=sal[i];
sal[i]=sal[j];
sal[j]=t;
t=mah[i];
mah[i]=mah[j];
mah[j]=t;
t=roz[i];
roz[i]=roz[j];
roz[j]=t;
}
else if (mah[i]==mah[j])
if ( roz[i]>roz[j])
{
Temp=name[i];
name[i]=name[j];
name[j]=Temp;
t=sal[i];
sal[i]=sal[j];
sal[j]=t;
t=mah[i];
mah[i]=mah[j];
mah[j]=t;
t=roz[i];
roz[i]=roz[j];
roz[j]=t;
}
}
}

Salar Ashgi
یک شنبه 07 شهریور 1389, 23:26 عصر
طبق روشی که قبلا گفتم ، یه مثال ساده با روش مرتب سازی حبابی Bubble Sort :



#include <iostream>
#include <conio>
#include <string>
using namespace std;
void swap(string &s1,string &s2){
string temp;
temp = s1;
s1 = s2;
s2 = temp;}
//============================
int main(){
string a[]={"salar","ali","reza","mohsen"};
for(int i=0;i<4;i++){
for(int j=0;j<4-i;j++){
if(a[j]>a[j+1])
swap(a[j],a[j+1]);}
}
for(int i=0;i<4;i++)
cout<<a[i]<<endl;
getch();
}



بنظرم شما نیز از این روش استفاده کرده اید ./