• پایان فعالیت بخشهای انجمن: امکان ایجاد موضوع یا نوشته جدید برای عموم کاربران غیرفعال شده است

اشکال در خواندن رشته - نیاز فوری -جستجوي رشته اي در رشته ديگر

bir_forum

کاربر تازه وارد
تاریخ عضویت
21 آپریل 2006
نوشته‌ها
3
لایک‌ها
0
در برنامه زیر تابع locate_ch يک رشته و يک کاراکتر را دريافت کرده، نخست متن رشته را چاپ مي‌نمايد سپس در خط زير آن در هر محلي که کاراکتر داده شده رخ داده باشد علامت ^ را چاپ مي‌کند.
برای اینکه بجای کاراکتر . بخوام برنامه رشته بگیره باید چکار کنم که نخست متن رشتة اصلي را چاپ کرده و در خط زير آن هر رخداد رشتة دوم را با علامتهاي ^ مشخص نمايد.
اگر بخوام 3 رشته را بگیره، که هر رخداد رشتة دوم در رشتة اول را با رشتة سوم جايگزين کند (لزومي ندارد طول رشته‌هاي دوم و سوم برابر باشند). چکار کنم ؟
به راهنمایی شما نیاز دارم .

در برنامه زیر تابع locate_ch يک رشته و يک کاراکتر را دريافت کرده، نخست متن رشته را چاپ مي‌نمايد سپس در خط زير آن در هر محلي که کاراکتر داده شده رخ داده باشد علامت ^ را چاپ مي‌کند.
برای اینکه بجای کاراکتر . بخوام برنامه رشته بگیره باید چکار کنم که نخست متن رشتة اصلي را چاپ کرده و در خط زير آن هر رخداد رشتة دوم را با علامتهاي ^ مشخص نمايد.
اگر بخوام 3 رشته را بگیره، که هر رخداد رشتة دوم در رشتة اول را با رشتة سوم جايگزين کند (لزومي ندارد طول رشته‌هاي دوم و سوم برابر باشند). چکار کنم ؟
به راهنمایی شما نیاز دارم .
کد:
#include <conio.h>
#include <stdio.h>

void locate_ch (char x[], char a);

int main()
	{
	char a[] = "trying to locate characters in a string";
	char p='t';

	locate_ch(a,'t');

	return 0;
	}

void locate_ch (char x[], char a) //prints ^ under special character
	{
	int i=0, h=0;
	printf("\n%s\n",x);
	while (x[i])
		if (x[i++]==a) printf("^");
		else printf(" ");
	}
 

Arman_BTC

کاربر تازه وارد
تاریخ عضویت
28 فوریه 2006
نوشته‌ها
138
لایک‌ها
1
دوست عزیز سلام
با این روش میشه یک رشته رو به طول دلخواه وارد کنید و با زدن کلید اینتر خاتمه پیدا میکنه

کد:
#include<iostream.h>
#include<string.h>
int main (){
char s1;
cin>>s1;
return 0;
}
 

no_leaf_clover

کاربر تازه وارد
تاریخ عضویت
11 فوریه 2006
نوشته‌ها
1
لایک‌ها
0
کد:
#include <string>
#include <iostream>

using namespace std;

int main()
{
	string s, src, tgt;
	getline(cin, s);
	getline(cin, src);
	getline(cin, tgt);

	string result = "";
	int pos = 0;
	while ((pos = s.find(src)) != s.npos)
	{
		result += s.substr(0, pos) + tgt;
		s = s.substr(pos + src.length());
	}
	
	result += s;
	cout << result << endl;

	return 0;
}
Is it what you need?​
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
به نقل از no_leaf_clover :
کد:
#include <[color=red]string[/color]> [color=blue]// instead of <string.h>[/color]
#include <iostream>

using namespace std;

int main()
{
	[color=red]string[/color] s, src, tgt;
	getline(cin, s);
	getline(cin, src);
	getline(cin, tgt);

	string result = "";
.....
.....
.....
.....
	return 0;
}
با سلام.
در كدهاي جناب no_leaf_clover از نوع داده اي به نام string استفاده شده ، كه در توربو سي error مي دهد. من قبلا كمي ويژوال سي كار كردم و يادمه در آنجا string به راحتي قابل استفاده بود.
فكر كنم كامپايلر ايشان توربو سي نبوده. همچنين در include ها بدون .h استفاده كرده اند كه نشان مي دهد كامپايلر جديدي استفاده كرده اند.
دوستان راجع به نوع داده string در توربوسي و كامپايلرهاي ديگه اگر ميشه كمي توضيح بدهند.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
برنامه زير ، در يك رشته بزرگتر ، به دنبال تعداد تكرار رشته كوچك تر مي گردد.
اول من دو آرايه تعريف كردم با 50 خانه.
بعد تعداد كاراكتر هر يك را با دنبال صفر گشتن در آرايه ها حساب كردم.

بعد در درازاي رشته بزرگ ، به دنبال تكرار كاراكترهاي رشته كوچك گشتم و اگر اين گونه بود ، يعني رشته كوچك در رشته بزرگ عينا بود ، عددي به نام shomaresh را يكي اضافه كردم.

فقط اين برنامه يك اشكال داره.
در رشته اول نميشه space زد. چون اگر اين كار را بكنيم ، فكر مي كنه دو رشته است و رشته كوچك را با همان ادامه رشته بزرگ پر مي كند.
دوستان اگر يك نوع input را مي شناسند كه اين مشكل را نداشته باشد را بگويند.

کد:
#include <iostream.h>
#include <conio.h>
      int i1,i2,j1,j2,barasi=1,shomaresh=0;
	  char large_word[50]={0};
	  char small_word[50]={0};
void main(void)
{
  clrscr();
	[color=blue] cout<<"give me large word   ";
	cin>> large_word;
	cout<<"give me small word   ";
	cin>> small_word;[/color]
     for (i1=0;i1<=100;i1++) if (large_word[i1]=='\0')  break;
     for (i2=0;i2<=100;i2++) if (small_word[i2]=='\0')  break;
       i1--;
       i2--;
	[color=red] for (j1=0;j1<i1;j1++)
	{
	    barasi=1;
		 for (j2=0;j2<=i2;j2++)
	      {
		      if (large_word[j1+j2] != small_word[j2] ) barasi=0;
	      }
		if (barasi==1)    shomaresh =shomaresh + 1 ;
	}[/color]
	cout<<"shomarsh= (yani tedad tekrare kochike dar bozorge)= "<<shomaresh<<endl;
   getch();
}
.

s2.gif

.
 

A.S.Roma

کاربر تازه وارد
تاریخ عضویت
9 می 2006
نوشته‌ها
24
لایک‌ها
0
با سلام
واقعا ممنون از شما دوست عزيز
در مورد مشكل برنامه هم با جايگزيني
HTML:
cin.getline( large_word, 50 );
cin.getline( small_word , 50 );
به جاي cin مشكل حل مي شود.
باز هم تشكر
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
خواهش و ممنون از رفع اشكال.
.
در برنامه بالا به راحتي ميشه به جواب استارتر تاپيك رسيد.
يعني هر جا رشته دوم را ديديم، به راحتي با ستاره ميشه پرش كرد.
يعني وقتي ((بررسي)) مثبت بود يك حلقه تشكيل بدهيم و آن قسمت رشته بزرگ را با ستاره پر كنيم.
.
 
بالا