PDA

View Full Version : پیدا کردن یک کاراکتر در کاراکتر دیگر فوری فوری



vahidm
شنبه 17 فروردین 1387, 11:03 صبح
با سلام دوستان عزیز
کسی برنامه ای داره که رشته ای رو در رشته ای دیگه جستجو کند ؟
مثال
welcome vahid to
بعد
کاربر با وارد کردن vahid پیام مناسبی رو چاپ کند
خواهش می کنم راهنمایی کنید
با تشکر

emad_67
شنبه 17 فروردین 1387, 13:12 عصر
تابع strstr از هدر فایل string.h این کار رو میکنه.
این تابع در صورت پیدا شدن رشته مورد نظر در رشته اصلی اشاره گری به اون کاراکتر رو بر میگردونه و اگه پیدا نشه NULL بر میگردونه.

vahidm
شنبه 17 فروردین 1387, 13:20 عصر
دوست عزیز آخه گفتن نباید از توابع استفاده بشه
در اصل باید تابع رو شبیه سازی کنیم
ببخشید

emad_67
شنبه 17 فروردین 1387, 13:36 عصر
خوب اگه اینجوری هست که خودت اول بنویس و بعد اگه مشکلی بود کدت رو بزار اینجا تا بررسی کینم چون اینجا حل تمرین و پروژه دانشجویی ممنوعه :)

Nima_NF
شنبه 17 فروردین 1387, 15:55 عصر
نوشتن برنامه به عهده خودتان هست و ما فقط کمک خواهیم کرد.
الگوریتم کار به این شکل هست، کارکتر به کارکتر از رشته مورد نظر به رشته بعدی جلو می روید و با == مقایسه را انجام می دهید، هرگاه این مقایسه ها تا انتها ادامه پیدا کرد و رشته مورد نظر شما به انتهای خود رسید یعنی رشته پیدا شده است، باید دقت کنید که مکان اولین مقایسه که درست بوده است (شماره کارکتر) و همین طور مکان آخر باید ذخیره شود تا در انتها اعلام شود

vahidm
شنبه 17 فروردین 1387, 20:13 عصر
دوستان با تشکر
ولی من اصلا به سیستم دسترسی ندارم وگرنه زحمت به شما نمی دادم
ببخشید مزاحم شدم

vahidm
شنبه 17 فروردین 1387, 21:44 عصر
با سلام
خواهشن این یکی رو دیگه حذف نکنید

MRHagh
شنبه 17 فروردین 1387, 23:04 عصر
این فقط بخاطر اینکه از برنامه نویسی بدت نیاد و بیشتر کار کنی ... !!!
روی برنامه ها باید خودت فکر کنی , این هم بخاطر اینکه راه بیفتی و ببینی چقدر ساده هست !

#include <iostream>
#include <string.h>
#include <stdio.h>
#include <conio.h>
using namespace std;
char PrmStr[100], FindStr[20], space=' ';
void input();
int WordFinder();
int MatchChecking(int , int);
void main()
{
input();
cout<<"\nfound "<<WordFinder()<<" matched case.\a";
getch();
}
void input()
{
cout<<"\nEnter the following terms ...\n\n"
"Primery string :\n ";
gets(PrmStr);
cout<<"A word for search:\n ";
gets(FindStr);
}
int WordFinder()
{
int MatchedCase=0,
PrmStrLen=strlen(PrmStr),
FindStrLen=strlen(FindStr), end;
for(int start=0; start<PrmStrLen; start++)
{
for(end=start; PrmStr[end]!=space && PrmStr[end]; end++);
if(end-start==FindStrLen)
MatchedCase+=MatchChecking(start, end);
start=end;
}
return MatchedCase;
}
int MatchChecking(int start, int end)
{
for(int i=0; start<end; start++, i++)
if(PrmStr[start]!=FindStr[i])
return 0;
return 1;
}

توجه کنید که این برنامه , کلمه ای(زیر رشته ای که ما بین دو space باشد) که مطابق الگوی ورودی باشد , پیدا میکند .

amir_cpp
یک شنبه 18 فروردین 1387, 09:25 صبح
البته اگر جستجو می کردین، ما قبلا این تابع رو نوشته بودیم! در همین بخش!

amir_cpp
یک شنبه 18 فروردین 1387, 09:31 صبح
خوب ما قبلا این مشکل رو حل کردیم!
http://barnamenevis.org/forum/showthread.php?t=62441&page=2
البته یکم تغییر لازم داره!

MRHagh
یک شنبه 18 فروردین 1387, 12:47 عصر
خوب ما قبلا این مشکل رو حل کردیم!
http://barnamenevis.org/forum/showthread.php?t=62441&page=2
البته یکم تغییر لازم داره!
تلاش شما هم قابل تحسین است . موفق باشید ...

pars.engineer
یک شنبه 18 فروردین 1387, 13:42 عصر
اینم برنامه کاملش که حتی مشخص می کند کارکتر یا رشته شما از کدام قسمت رشته اصلی آغاز شده است:



#include <stdio.h>
#include <conio.h>
#include <string.h>
void search(char*,char*,int,int);
void main()
{
char str1[100],str2[20];
int lstr1,lstr2;
printf("\n Enter String: ");
gets(str1);
lstr1=strlen(str1);
printf("\n Enter String For Pattern:");
gets(str2);
lstr2=strlen(str2);
if(lstr2>lstr1)
{
printf("\n Error String Pattern Has Been Lower From Master String");
goto l1;
}
search(str1,str2,lstr1,lstr2);
l1:
getch();
}
//***************************************
void search(char *s1,char *s2,int lens1,int lens2)
{
int position[20];
int i,j,count=0,mcount=0,t,k=0;
for(i=0;i<lens1;++i)
{
for(t=i,j=0;j<lens2;++j,++t)
{
if(s1[t]==s2[j])
++count;
else
break;
}
if(count==lens2)
{
mcount++;
position[k]=i;
++k;
count=0;
}
}
printf("\n Repeat Patern Is : %d \n",mcount);
for(k=0;k<mcount;++k)
printf("\n\n Position Pattern %d In String1 Is: %d ",k+1,position[k]+1);
}

MRHagh
دوشنبه 19 فروردین 1387, 10:11 صبح
برنامه ای بهتر و کاربر پسندتر !!!!!!!! که الگوی یافته شده را در داخل متن Highlight میکند !!
فایل دوم (ُSTRFind) همه الگو ها را یافته و HighLight میکند, کاملتر از اولی(strsearch)است ... !

vahidm
دوشنبه 19 فروردین 1387, 10:38 صبح
دوستان تشکر من خودم برنامه رو نوشتم
همه دوستان در برنامه هایی که لطف کردن دادن از تابع استفاده کرده اند
آخه استادمون گفته بود باید از تابع استفاده نکنید
خیلی متشکرم

vahidm
دوشنبه 19 فروردین 1387, 10:42 صبح
دوست عزیز MRHagh باز هم تشکر
ببینید من خودم در زمینه Vb زیاد کار کردم ولی در زبان سی یا پاسکال خیلی کم چون دیدم زیاد به دردم نمی خوره ولی خب حالا به مشکلی برخوردم که شما همه دوستان لطف کردید و کمک کردید حالا کسی برنامه جمع چند دو جمله ای رو داره ؟؟؟؟؟

MRHagh
دوشنبه 19 فروردین 1387, 14:07 عصر
شما که امضات"انجام پروژه های بزرگ برنامه نویسی" است , چه طور میتونی بگی C به دردت نمیخوره ؟!!!!!!!!
استاد شما هم به احتمال قوی منظورشون این بوده که از توابع کتابخانه ای استاندارد C که برای یافتن زیر رشته هستن استفاده نکنید , نه این توابعی که ما برای ماژولار کردن برنامه از اونها استفاده کردیم , همینطور که کمتر استادی هست که بخواد دانشجوها کل برنامه رو در main بنویسند .
اگر منظور شما از "جمع چند دو جمله ای" همون "جمع دو چند جمله ای " است !!! خدمتتون عرض کنم که تو هر کتاب ساختمان داده ای که نگاه کنید , الگوریتمی برای جمع چندجمله ای ها وجود داره و چیز بسیار ساده و پیش پا افتاده ای هست !!!

pars.engineer
دوشنبه 19 فروردین 1387, 15:32 عصر
دوست عزیز MRHagh فایل شما اجرا نمی شه لطف کنید کدهای برنامه رو بزارید تا هم الگوریتم قابل درک باشد و هم در هر سیستم عاملی یکبار کامپایل شود .
ضمنا اگر می شد برنامه ای که شما در سیستم خودتان کامپایل کرده اید در سیستم دیگران نیز به درستی اجرا گردد دیگر نیازی به تکنولوژی .NET و فایلهای Setup نبود.
با تشکر

MRHagh
سه شنبه 20 فروردین 1387, 09:37 صبح
ضمنا اگر می شد برنامه ای که شما در سیستم خودتان کامپایل کرده اید در سیستم دیگران نیز به درستی اجرا گردد دیگر نیازی به تکنولوژی .NET و فایلهای Setup نبود.
با تشکر
چه ربطی داشت ... ؟!!!

vahidm
چهارشنبه 21 فروردین 1387, 10:46 صبح
شما که امضات"انجام پروژه های بزرگ برنامه نویسی" است , چه طور میتونی بگی C به دردت نمیخوره ؟!!!!!!!!
استاد شما هم به احتمال قوی منظورشون این بوده که از توابع کتابخانه ای استاندارد C که برای یافتن زیر رشته هستن استفاده نکنید , نه این توابعی که ما برای ماژولار کردن برنامه از اونها استفاده کردیم , همینطور که کمتر استادی هست که بخواد دانشجوها کل برنامه رو در main بنویسند .
اگر منظور شما از "جمع چند دو جمله ای" همون "جمع دو چند جمله ای " است !!! خدمتتون عرض کنم که تو هر کتاب ساختمان داده ای که نگاه کنید , الگوریتمی برای جمع چندجمله ای ها وجود داره و چیز بسیار ساده و پیش پا افتاده ای هست !!!

سلام دوست عزیز
بله درسته انجام پرو‍ه های بزرگ برنامه نویسی البته بنده با VB و کمی Vb.net کار می کنم
ولی قبول دارم که اگر برنامه ای با C نوشته شود در هر سیستم عاملی که بخوای استفاده کنی جواب میده منظورم در linux‌و ایناست ولی خب اگر شما با VB هم برنامه بنویسی می بینی که خیلی راحت تر هست یعنی سیستمی هم که تو خونه استفاده می کنم اصلا زبان سی نمیکشه وگرنه خودم می خواستم #C کار کنم
ببخشید

MRHagh
پنج شنبه 22 فروردین 1387, 23:25 عصر
این هم برنامه جمع دو چند جمله ای :

#include <iostream>
#include <conio.h>
using namespace std;
class Term
{
int coef;
int expo;
public:
Term *next;
Term(int coef, int expo)
{
this->coef=coef;
this->expo=expo;
next=0;
}
int GetCoef()
{
return coef;
}
int GetExpo()
{
return expo;
}
};
class Polynomial
{
Term *first;
Term *last;
public:
int length;
Polynomial(Term *ptr):first(ptr), last(ptr){}
void SetFirstTerm(Term *ptr)
{
first=ptr;
}
void SetLastTerm(Term *ptr)
{
last->next=ptr;
last=ptr;
}
Term* GetFirstTerm()
{
return first;
}
Term* GetlastTerm()
{
return last;
}
};
Polynomial* input(Polynomial* =0);
Polynomial* calculate(Polynomial*, Polynomial*);
void print(Polynomial*, char*);
void main()
{
Polynomial *poly1, *poly2;
cout<<"Enter coefficients and exponents of polynimoal 1:\n"
"(first enter coefficient then press \"space\" then enter exponent and press \"Enter\" '0 0' for end):";
poly1=input();
cout<<"Enter coefficients and exponents of polynimoal 2:\n"
"(first enter coefficient then press \"space\" then enter exponent and press \"Enter\" '0 0' for end):";
poly2=input();
system("cls");
print(poly1, "First Polynimial:\n ");
print(poly2, "Secend Polynomial:\n ");
print(calculate(poly1, poly2), "Result:\n ");
getch();
}
Polynomial* input(Polynomial *poly)
{
int coef=1, expo, i;
Term *term;
for(i=1; coef; i++)
{
cout<<"\n"<<i<<".";
cin>>coef>>expo;
term=new Term(coef, expo);
if(!poly)
poly=new Polynomial(term);
poly->SetLastTerm(term);
}
poly->length=i;
return poly;
}
Polynomial* calculate(Polynomial *poly1, Polynomial *poly2)
{
Polynomial *result=0;
Term *curtrm1=poly1->GetFirstTerm(), *curtrm2=poly2->GetFirstTerm(), *term, *collation;
while(curtrm1->next && curtrm2->next)
{
if(curtrm1->GetExpo()==curtrm2->GetExpo())
{
term=new Term(curtrm1->GetCoef()+curtrm2->GetCoef(), curtrm1->GetExpo());
curtrm1=curtrm1->next;
curtrm2=curtrm2->next;
}
else if(curtrm1->GetExpo()<curtrm2->GetExpo())
{
term=new Term(curtrm2->GetCoef(), curtrm2->GetExpo());
curtrm2=curtrm2->next;
}
else if(curtrm1->GetExpo()>curtrm2->GetExpo())
{
term=new Term(curtrm1->GetCoef(), curtrm1->GetExpo());
curtrm1=curtrm1->next;
}
if(!result)
result=new Polynomial(term);
result->SetLastTerm(term);
}
collation=(curtrm1->next)?curtrm1:curtrm2;
while(collation->next)
{
term=new Term(collation->GetCoef(), collation->GetExpo());
result->SetLastTerm(term);
collation=collation->next;
}
term=new Term(0, 0);
result->SetLastTerm(term);
return result;
}
void print(Polynomial *poly, char *AnswerType)
{
Term *curtrm=poly->GetFirstTerm();
cout<<"\n"<<AnswerType;
while(curtrm->next)
{
if(curtrm->GetCoef()!=1 && curtrm->GetCoef()!=-1)
{
cout<<curtrm->GetCoef();
if(curtrm->GetExpo()!=0)
cout<<"x";
}
if(curtrm->GetExpo()!=1 && curtrm->GetExpo())
cout<<"^"<<curtrm->GetExpo();
if(curtrm->next->GetCoef()>0)
cout<<"+";
curtrm=curtrm->next;
}
}

در استفاده از این برنامه به شکل زیر عمل کنید :
1. چند جمله ای را بصورت استاندارد و به ترتیب نزولی توانهای x وارد کنید (البته با اضافه کردن یک کد ساده sort دیگه نیازی به این کار نبود , من وقت نکردم اضافه کنم !)

2. در وارد کردن ضرایب و توانهای متغیر x به این شکل عمل کنید که ابتدا ضریب x را وارد کنید , بعد یک فاصله (space) بدهید , بعد توان x را وارد کنید بعدش هم Enter بزنید تا جمله بعدی را وارد کنید .

3. برای پایان دادن به عمل ورود جملات , کافیست در آخرین ورودی هم ضریب و هم توان را 0 وارد کنید .

مثال)برای وارد کردن چند جمله ای زیر:


2x^5+6x^4+3x^2+4
پس از اجرای برنامه به این شکل عمل میکنیم:


Enter coefficients and exponents of polynimoal 1:
1. 2 5
2. 6 4
3. 3 2
4. 4 0
5. 0 0

و بعد چند جمله ای دوم را هم به همین ترتیب وارد کنید و Enter را بزنید تا حاصلجمع محاسبه شود . برنامه به همراه سورس, ضمیمه شده !


موفق باشید ...

vahidm
جمعه 23 فروردین 1387, 20:05 عصر
با سلام دستتون درد نکنه واقعا که لطف کردید از همگی ممنونم