50٪ تخفیف روی تمام دوره‌ها!
پایان تخفیف تا:
مشاهده دوره‌ها
0

راهنمایی برای تصحیح یک قطعه کد ++C

درود

یه قطعه کد دارم که کارش دریافت یک رشته و معکوس کردن اون هست، این کد با استفاده از یک تابع (که وظیفه‌ی معکوس کردن رو بر عهده داره نوشته شده) ورودی‌های تابع رو با استفاده از اشاره‌گر فرستادم:

میشه گفت تقریبا بدون مشکل کار میکنه ولی نمیدونم چرا بعد از اینکه معکوس رو نمایش داد، یکسری کارکتر نامفهوم+خود رشته‌ی ورودی رو چاپ می‌کنه، به این صورت:

درود

یه قطعه کد دارم که کارش دریافت یک رشته و معکوس کردن اون هست، این کد با استفاده از یک تابع (که وظیفه‌ی معکوس کردن رو بر عهده داره نوشته شده) ورودی‌های تابع رو با استفاده از اشاره‌گر فرستادم:

میشه گفت تقریبا بدون مشکل کار میکنه ولی نمیدونم چرا بعد از اینکه معکوس رو نمایش داد، یکسری کارکتر نامفهوم+خود رشته‌ی ورودی رو چاپ می‌کنه، به این صورت:
||http://tosinso.com/files/get/d48ab9e6-d90a-4ffd-99a7-b94b964843ff||

استادمون گفت کافیه یه خط کد به آخر تابعت اضافه کنی تا مشکل حل بشه (انتهای تابع، محلی که با نقطه‌چین مشخص کرده) ولی از دیروز تا حالا هرچی تلاش میکنم مشکلش حل نمیشه، کد من به این صورت هست:
<cpp>
#include <iostream>
#include <conio.h>
using namespace std;

void riverse(char *a,char *b, int m);
int main()
{
    char x[1000], y[1000];
    int i;
    cin>>x;
    for( i=0;x[i]!='\0';i++);
    riverse(x,y,i-1);
    cout << y << endl;
	getch();
    return 0;
}
void riverse(char *a,char *b, int m)
{
    int i;
    for( i=0;i<=m;i++)
        b[m-i]=a[i];
//.........................
}
<cpp>

ممکنه راهنماییم کنید و بگید چه مشکلی در کد هست و چطوری میشه برطرفش کرد؟

پیشاپیش سپاس بابت راهنماییتون

استادمون گفت کافیه یه خط کد به آخر تابعت اضافه کنی تا مشکل حل بشه (انتهای تابع، محلی که با نقطه‌چین مشخص کرده) ولی از دیروز تا حالا هرچی تلاش میکنم مشکلش حل نمیشه، کد من به این صورت هست:

#include <iostream>
#include <conio.h>
using namespace std;

void riverse(char *a,char *b, int m);
int main()
{
    char x[1000], y[1000];
    int i;
    cin>>x;
    for( i=0;x[i]!='\0';i++);
    riverse(x,y,i-1);
    cout << y << endl;
	getch();
    return 0;
}
void riverse(char *a,char *b, int m)
{
    int i;
    for( i=0;i<=m;i++)
        b[m-i]=a[i];
//.........................
}

ممکنه راهنماییم کنید و بگید چه مشکلی در کد هست و چطوری میشه برطرفش کرد؟

پیشاپیش سپاس بابت راهنماییتون

پرسیده شده در 1395/01/27 توسط

2 پاسخ

3

سلام باید انتهای آرایه b رو مشخص کنید الان هر هزار تا عنصر b یا همون y داره نشون داده میشه

b[m]='\0';
پاسخ در 1395/01/27 توسط
1

سپاس‌گذارم بابت راهنماییتون مشکلم با کمک شما حل شد، البته یه تغییر کوچیک در کدی که گذاشتید دادم:

b[m+1]='\0';

اندیس آرایه باید m+1 میشد، چون در حالت معمولی (m) اندیس آخرین کارکتر هست و در این حالت آخرین کارکتر هم حذف میشد!

مجددا سپاس بابت راهنماییتون

پاسخ در 1395/01/27 توسط

پاسخ شما