a.safari
پنج شنبه 01 خرداد 1393, 12:43 عصر
با سلام ، اگه ممکنه یه برنامه ساده به زبان سی ++ میخوام.. کلاسی به اسم full string توش تعریف شده باشه.
تابع اول کلاس باید 2 تا اسم از کاربر بگیره اونارو از هم دیگه کم کنه، مثلا alireza , reza خروجی نشون بده ali، یا mohammad و m خروجی = ohaad. برنامه این رو یکی از دوستان زحمتشو کشیدن اما خیلی طولانیه.
#include <iostream>
#include <conio.h>
class string
{
public:
char string[1001];
operator = (char *a)
{
string[(strlen(a)>1000?1000:strlen(a))]=0;
for (unsigned int i=0;i<(strlen(a)>1000?1000:strlen(a));i++)
string[i]=a[i];
}
};
unsigned int strlen (string a)
{
return strlen(a.string);
}
long int instring(string a,string b)
{
unsigned int similarity_rate=0,a_len=strlen(a),b_len=strlen(b);
for (unsigned int i=0;i<a_len;i++)
{
for (unsigned int j=0;j<b_len;j++)
{
if (i+j>a_len)
break;
if (a.string[i+j]==b.string[j])
similarity_rate++;
else
break;
}
if (similarity_rate==b_len)
return i;
similarity_rate=0;
}
return -1;
}
L_shift(string *a,unsigned int start,unsigned int len)
{
unsigned int a_len=strlen(a[0]);
for (unsigned int i=start;i<a_len;i++)
{
if (i+len>a_len)
break;
a[0].string[i]=a[0].string[i+len];
}
a[0].string[a_len-len]=0;
}
void main()
{
char a[1000],b[1000];
string str_a,str_b;
cin>>a>>b;
str_a=a;
str_b=b;
long int location_in_str=instring(str_a,str_b);
while (location_in_str>-1)
{
L_shift(&str_a,location_in_str,strlen(b));
location_in_str=instring(str_a,str_b);
}
cout<<str_a.string;
getch();
}
تابع دوم کلاس هم یک کلمه رو از کاربر بگیره معکوس اون کلمه رو با اصلش میکس کنه خروجی بده. مثلا alireza .. خروجی = a A z L e I r R i E l Z a A اینو نشون بده. یا ali خروجی = ia ll i a (یعنی ali و ila رو با هم میکس کنه). ( برنامه معکوس رشته رو بلدم اما تو خروجیش موندم چجوری هر دو آرایه رو میکس کنم چاپ شه).
تابع اول کلاس باید 2 تا اسم از کاربر بگیره اونارو از هم دیگه کم کنه، مثلا alireza , reza خروجی نشون بده ali، یا mohammad و m خروجی = ohaad. برنامه این رو یکی از دوستان زحمتشو کشیدن اما خیلی طولانیه.
#include <iostream>
#include <conio.h>
class string
{
public:
char string[1001];
operator = (char *a)
{
string[(strlen(a)>1000?1000:strlen(a))]=0;
for (unsigned int i=0;i<(strlen(a)>1000?1000:strlen(a));i++)
string[i]=a[i];
}
};
unsigned int strlen (string a)
{
return strlen(a.string);
}
long int instring(string a,string b)
{
unsigned int similarity_rate=0,a_len=strlen(a),b_len=strlen(b);
for (unsigned int i=0;i<a_len;i++)
{
for (unsigned int j=0;j<b_len;j++)
{
if (i+j>a_len)
break;
if (a.string[i+j]==b.string[j])
similarity_rate++;
else
break;
}
if (similarity_rate==b_len)
return i;
similarity_rate=0;
}
return -1;
}
L_shift(string *a,unsigned int start,unsigned int len)
{
unsigned int a_len=strlen(a[0]);
for (unsigned int i=start;i<a_len;i++)
{
if (i+len>a_len)
break;
a[0].string[i]=a[0].string[i+len];
}
a[0].string[a_len-len]=0;
}
void main()
{
char a[1000],b[1000];
string str_a,str_b;
cin>>a>>b;
str_a=a;
str_b=b;
long int location_in_str=instring(str_a,str_b);
while (location_in_str>-1)
{
L_shift(&str_a,location_in_str,strlen(b));
location_in_str=instring(str_a,str_b);
}
cout<<str_a.string;
getch();
}
تابع دوم کلاس هم یک کلمه رو از کاربر بگیره معکوس اون کلمه رو با اصلش میکس کنه خروجی بده. مثلا alireza .. خروجی = a A z L e I r R i E l Z a A اینو نشون بده. یا ali خروجی = ia ll i a (یعنی ali و ila رو با هم میکس کنه). ( برنامه معکوس رشته رو بلدم اما تو خروجیش موندم چجوری هر دو آرایه رو میکس کنم چاپ شه).