ادغام کردن دو رشته در ++c

mhabat

Member
با سلام ونشکـــر من دارم چندتا تمرین درمورد کار بارشته ها رو حل میکنم که چند تا مشکل دارم.
تمرین 2-برنامه یی بنویسید که رشته از ورودی گرفته واندازه ی آن هارا چاپ کند و سپس رشته ی دومی را در اولی قراردهد.
سورسشو تا قسمت اولش نوشتم اما نمتانم ادغمشون کنم.سورس:
کد:
#include<iostream.h>
#include<conio.h>
int main(){ clrscr();
char a,b;
int i=-1;int j=-1;
while(a!=13){
a=getche();
i++; }
cout<<endl;
while(b!=13){
b=getche();
j++; }
clrscr();
cout<<"The own  Charecter Numbers: "<<i<<endl;
cout<<"The thow Charecter Numbers: "<<j<<endl;
getch(); return 0; }
لازم به ذکر کا این تمرین هارو میشد با فایل سرآمدstring.hانجام داد اما تمرینی برای خودمه
باتشکر
بــــدرود
 
آخرین ویرایش توسط مدیر:

the_king

مدیرکل انجمن
با سلام ونشکـــر من دارم چندتا تمرین درمورد کار بارشته ها رو حل میکنم که چند تا مشکل دارم.
تمرین 2-برنامه یی بنویسید که رشته از ورودی گرفته واندازه ی آن هارا چاپ کند و سپس رشته ی دومی را در اولی قراردهد.
سورسشو تا قسمت اولش نوشتم اما نمتانم ادغمشون کنم.
1) این شرط ایراد داره، در زبان C و ++C متغیر ها موقع تعریف شدن مقدار مشخصی ندارند مگر اینکه خودتان مقدار
اولیه شان را مشخص کنید. هر مقدار تصادفی که در حافظه شان قرار دارد را بکار می برند و الزاما 0 نیستند.
شما مقدار اولیه a را تعیین نکرده اید به همین دلیل موقعی که به حلقه while می رسید مقدار a نامشخص
و غیر قابل پیش بینی است، ممکن است 13 باشد یا نباشد.
کد:
while(a!=13){

2) زمانی می توانید رشته دومی را در رشته اولی قرار دهید که اصلا رشته ای وجود داشته باشد، وقتی شما
صرفا دو کاراکتر a و b دارید و کاراکتر های قبلی را جایی نگه نداشته اید رشته ای نیست که بخواهید در اولی
قرارش دهید. باید بجای صرفا دو کاراکتر، کل دو رشته را نگهداری کنید.

کد:
#include <iostream.h>
#include <conio.h>

int main()
{
    clrscr();
    char a[100], b[100];
    int i = -1, j = -1, k;
    do
    {
        i++;
        a[i] = getche();
    } while (a[i] != 13);
    cout << endl;
    do
    {
        j++;
        b[j] = getche();
    } while (b[j] != 13);
    clrscr();
    cout << "The length of first string : " << i << endl;
    cout << "The length of second string : " << j << endl;
    for (k = 0; k < j; k++)
        a[i + k] = b[k];
    a[i + k] = '\0';
    cout << "The merged string : " << a << endl;
    getch();
    return 0;
}
 

mhabat

Member
سلام.ببخشید این قسمت رو متوجه نمیشم:
کد:
a[i + k] = b[k];
ممنون
 

the_king

مدیرکل انجمن
سلام.ببخشید این قسمت رو متوجه نمیشم:
کد:
a[i + k] = b[k];
ممنون
متغیر i طول رشته اوله و متغیر k در حلقه از اولین کاراکتر تا آخرین کاراکتر رشته دوم رو پیمایش می کنه.
کد بالا کاراکتر شماره k ام رشته دوم رو در انتهای رشته اول کپی می کنه.
فرضا رشته اول one است و رشته دوم two
کد:
a[0] = 'o'
a[1] = 'n'
a[2] = 'e'
i = 3

b[0] = 't'
b[1] = 'w'
b[2] = 'o'
j = 3

کد داخل حلقه سه کاراکتر رشته دوم رو در انتهای رشته اول کپی می کنه :
کد:
a[3 + 0] = b[0]
a[3 + 1] = b[1]
a[3 + 2] = b[2]
 

mhabat

Member
میشه کاری کرد که وقتی رشته دوم روبه اولی اضافه میکنه بینشون یک فاصله هم باشه؟
اگه مقدار bرو به0تغییر بدیم و بعد ار این حلقه:
کد:
do
    {
        j++;
        b[j] = getche();
    } while (b[j] != 13);
دستور:
کد:
i--;
رو اضافه کنیم و دستور زیر رو اجرا کنیم :
کد:
cout<<b;
چیزی در خروجی نایش داده نمیشه اما اگه iرو دوباه به -1تغییر بدیم و دستورi--و حذف کنیمbدر خروجی چاپ میشه.
خیل ممنون
بــــدرود
 

the_king

مدیرکل انجمن
میشه کاری کرد که وقتی رشته دوم روبه اولی اضافه میکنه بینشون یک فاصله هم باشه؟
اگه مقدار bرو به0تغییر بدیم و بعد ار این حلقه:
کد:
do
    {
        j++;
        b[j] = getche();
    } while (b[j] != 13);
دستور:
کد:
i--;
رو اضافه کنیم و دستور زیر رو اجرا کنیم :
کد:
cout<<b;
چیزی در خروجی نایش داده نمیشه اما اگه iرو دوباه به -1تغییر بدیم و دستورi--و حذف کنیمbدر خروجی چاپ میشه.
خیل ممنون
بــــدرود

اگر بخواهید رشته ای رو با cout یا printf یا هر شیوه دیگری که با رشته ها سر و کار داره بکار ببرید باید حتما انتهای
رشته رو با کاراکتر 0 یا '0\' مشخص کنید، وگرنه اون تابع از کجا بدونه که طول رشته شما چقدره :
کد:
    do
    {
        i++;
        a[i] = getche();
    } while (a[i] != 13);
    [B][COLOR="Blue"]a[i] = 0;[/COLOR][/B]

کد:
    do
    {
        j++;
        b[j] = getche();
    } while (b[j] != 13);
    [B][COLOR="Blue"]b[j] = 0;[/COLOR][/B]

اگر خواستید قبل از اضافه کردن b به a کاراکتری رو به انتهای a اضافه کنید، هم اون کاراکتر رو اضافه کنید
(مثلا +) و هم i رو افزایش دهید.مشخص کردن انتهای جدید رشته اختیاری یه، چون موقع اضافه کردن b
به هر حال بازنویسی میشه :
کد:
a[i] = '+';
i++;
[B][COLOR="Blue"]a[i] = 0;[/COLOR][/B]
 

mahdi_97

New Member
سلام.ببخشید چجوری می شه دو عبارت رو گرفت بعد آن دو عبارت رو کنار هم چاپ کرد
 

the_king

مدیرکل انجمن
سلام.ببخشید چجوری می شه دو عبارت رو گرفت بعد آن دو عبارت رو کنار هم چاپ کرد
کد:
#include <iostream>
#include <conio.h>

using namespace std;

int main()
{
    char a[100], b[100];
    cout<<"enter string a:";
    gets(a);
    cout<<"enter string b:";
    gets(b);
    cout << "output = " << a << b << endl;
    return 0;
}
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلام
استاد علی ، میگم در سی پلاس پلاس ، چرا بعد از دستور cout ، عبارت >> میاد؟
الان این cout مگه نباید تابع باشه؟ این چه دستوری هست که سینتکس اش در سی شارپ نیست؟
آیا عبارت >> بعد از cout ، در واقع اورلود عملگر هست ؟
 

the_king

مدیرکل انجمن
سلام
استاد علی ، میگم در سی پلاس پلاس ، چرا بعد از دستور cout ، عبارت >> میاد؟
الان این cout مگه نباید تابع باشه؟ این چه دستوری هست که سینتکس اش در سی شارپ نیست؟
آیا عبارت >> بعد از cout ، در واقع اورلود عملگر هست ؟
cout تابع نیست، object ئه. یک object ئه که میتونه برای کلاس اش انواع عملگر ها تعریف بشه، مثل اون >>
اون >> ساده شده یک تابعی است که موقع گرانبار شدن تعریف شده و موقع اجرا عملا اون تابع با مقادیر پارامتر ها اجرا میشه.
بله، وجود این >> حاصل گرانبار کردن عملگر ئه.
گرانبار کردن عملگر ها برای مقایسه و نمایش دو کلاس در زبان ++c
 

جدیدترین ارسال ها

بالا