مشکل:تابع ادغام دو رشته

mhabat

Member
با سلام سورس ادغام کردن دو رشته رو خواستم با تابع بنویسم که مشکل داره:
کد:
#include<iostream.h>
#include<conio.h>
void ali(char x[],char y[]){
for(int z=0;x[z]!=0;z++);
for(int s=0;y[s]!=0;s++);
for(int k=0;k<s;k++)
x[z+k]=y[s];
x[z+k]='/0';
cout<<x; }
int main() { clrscr();
char a[99],b[99];
cin>>a;
cin>>b;
ali(a,b);
getch();
return 0; }
خیلی ممنون
بدرود
 

the_king

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

1) بعضی کامپایلر ها به روی مبارک شون نمیارند اما در زبان ++C وقتی شما جایی یک متغیر محلی تعریف می کنید،
ناحیه ای که اون متغیر قابل استفاده است، همون بلوکی است که متغیر تعریف شده. فرضا این متغیر x در کل تابع
ali قابل استفاده است :
کد:
void ali()
{
	int x;

اما این x داخل حلقه for تعریف شده و فقط داخل همون حلقه for قابل دسترسی یه :
کد:
void ali()
{
	for (int x = 0; x < 5; x++)
	{

برای همین این کد ایراد داره، شما نمی توانید از مقادیر z و s خارج از حلقه for شون استفاده کنید چون داخل
حلقه for تعریف شده اند و در بقیه کد های تابع وجود خارجی ندارند :
کد:
for(int z=0;x[z]!=0;z++);
for(int s=0;y[s]!=0;s++);

for(int k=0;k<s;k++)

متغیر های اینچنینی رو که بیرون حلقه بهشون نیاز دارید رو خارج از حلقه for تعریف کنید :
کد:
int z, s;

for(z=0;x[z]!=0;z++);
for(s=0;y[s]!=0;s++);

for(int k=0;k<s;k++)

2) شما برای انتقال کاراکتر از متغیر اشتباهی استفاده کرده اید :
کد:
for(int k=0;k<s;k++)
x[z+k]=y[[B][COLOR="Blue"][SIZE="3"]s[/SIZE][/COLOR][/B]];
متغیر s در داخل حلقه هیچ تغییری نمی کنه، شما که نمی خواهید مدام یک کاراکتر ثابت و تکراری رو به رشته x
اضافه کنید، باید بجای s از k استفاده می کردید.

3) کاراکتر انتهای رشته '0\' است، نه '0/' ، می توانید بجای '0\' از 0 استفاده کنید :
کد:
    x[z + k] = '\0';

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

void ali(char x[],char y[])
{
    int z, s, k;
    for (z = 0; x[z] != 0; z++);
    for (s = 0; y[s] != 0; s++);
    for (k = 0; k < s; k++)
        x[z + k] = y[k];
    x[z + k] = '\0';
    cout << x;
}
int main()
{
    clrscr();
    char a[99], b[99];
    cin >> a;
    cin >> b;
    ali(a, b);
    getch();
    return 0;
}
 

mhabat

Member
سلام.اگه برای سورس بالایی بخوام یک کد بنوسیم که هنگام ادغام دورشته بینشون فاصله باشه در پست های قبل یاد گرفتم اما اگه این کار رو بخوام با سوال کردن از کاربر انجام بدم تو قسمتی که می خوام یک کارکتر رو به عنوان متغیر برای switchاستفاده کنم میزنه این کار امکان پذیر نیست.سورس:
کد:
#include <iostream.h>
#include <conio.h>
void ali(char x[],char y[],char t[])
{
    int z, s, k;
    for (z = 0; x[z] != 0; z++);
    switch(t) {
  case 'y':
    x[z]=' ';
    z++;
    x[z]=0; break;
    defualt: cout<<"Unknown Charecter"; break;
    }
    for (s = 0; y[s] != 0; s++);
    for (k = 0; k < s; k++)
        x[z + k] = y[k];
    x[z + k] = '\0';
    cout << x;
    
}
int main()
{
    clrscr();
    char a[99], b[99],d[10];
    cin >> a;
    cin >> b;
    cout<<"Do You Want Spease Between Strings?(y/n)";
    ali(a,b,d);
    getch();
    return 0;
}
پستم مرتبط با موضوع تایپک هست دیگه؟
خیلی ممنون
بــــدرود
 

the_king

مدیرکل انجمن
سلام.اگه برای سورس بالایی بخوام یک کد بنوسیم که هنگام ادغام دورشته بینشون فاصله باشه در پست های قبل یاد گرفتم اما اگه این کار رو بخوام با سوال کردن از کاربر انجام بدم تو قسمتی که می خوام یک کارکتر رو به عنوان متغیر برای switchاستفاده کنم میزنه این کار امکان پذیر نیست.

1) شما در کد تابع main تان d رو به عنوان پارامتر سوم به تابع ali ارسال می کنید، اما در main مقدار d رو
از کاربر نگرفتید، یا اصلا پارامتر سوم رو حذف کنید و خواندن مقدار t رو به خود تابع ali واگذار کنید،
یا مقدار d رو پیش از فراخوانی کردن تابع ali در main مشخص کنید.

2) کاربر قراره کلید های y یا n رو انتخاب کنه، لزومی نداره برای خواندن یک کارکتر یک آرایه بسازید، یک متغیر char
کفایت می کنه. با getch مقدارش را بخوانید. نیازی به Enter زدن هم نداره. فقط بعد از getch کردن cout را به
سطر بعدی فرستید تا نمایش متن خروجی برنامه تان یا پیغام Unknown Charecter به y یا n نچسبه.

3) کاراکتر 'n' قابل قبوله، پس برایش پیغام Unknown Charecter نشان ندهید.

4) دیکته default اشتباه بود.

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

using namespace std;

void ali(char x[], char y[], char t)
{
    int z, s, k;
    for (z = 0; x[z] != 0; z++);
    switch(t) {
        case 'y':
        case 'Y':
            x[z] = ' ';
            z++;
            x[z]=0;
            break;
        case 'n':
        case 'N':
            break;
        default:
            cout << "Unknown Charecter";
            break;
    }
    for (s = 0; y[s] != 0; s++);
    for (k = 0; k < s; k++)
        x[z + k] = y[k];
    x[z + k] = '\0';
    cout << x;
}
int main()
{
    clrscr();
    char a[99], b[99], d;
    cin >> a;
    cin >> b;
    cout << "Do You Want Spease Between Strings?(y/n)";
    d = getch();
    cout << endl;
    ali(a, b, d);
    getch();
    return 0;
}
 

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

بالا