PDA

View Full Version : مبتدی: کمک برای تابع و پوینتر



mitra.as
شنبه 30 خرداد 1394, 08:44 صبح
سلام
یه تابع باید بنویسم که دو تا رشته را گرفته و دومی رو معکوس کنه و به اولی بچسبونه و چاپ کنه
میشه یکی کمکم کنه؟:ناراحت:

amirtork
شنبه 30 خرداد 1394, 12:50 عصر
سلام.
برای معکوس کردن میتونید از تابع reverse (http://www.cplusplus.com/reference/algorithm/reverse/) در هدر فایل algorithm (http://www.cplusplus.com/reference/algorithm/) استفاده کنید.
و برای متصل کردن دو رشته میتونید از عملگر (operator) += استفاده کنید.

ehsan_faal
شنبه 30 خرداد 1394, 16:26 عصر
من واسه تمرین اومدم این سوال رو با پوینتر ها بنویسم ولی توی استفاده از تابع strcat_s به مشکل خوردم.
هر چی هم سرچ کردم متوجه نشدم مشکلم چیه.
ممنون میشم دوستان یه نگاهی بندازن به این کد:

#include <iostream>
#include <string>
#include <assert.h>
using namespace std;
char *ReverseCat(char*, const char*);
void main(void)
{
char Str1[] = " C++ Language is the most powerful ";
char Str2[] = "egaugnaL";
cout << "String 1:" << Str1 << endl;
cout << "String 2:" << Str2 << endl;
cout << "String 1 + Reverse(String 2):" << ReverseCat(Str1,Str2) << endl;

}
char *ReverseCat(char*Dest, const char*Source)
{
//Reverse Part:
int index = 0;
for (; Source[index]; index++);
index--;
char *SourceHolder = _strdup(Source);
assert(SourceHolder != 0);
int Max = index;
for (int index2 = 0; index2 <= Max; index2++, index--)
SourceHolder[index2] = Source[index];
//Concatenate Part:
char *DestAddr = Dest;
Dest = new char[strlen(Dest) + strlen(SourceHolder) + 1];
assert(Dest != 0);
memset(Dest, 'H', (strlen(Dest)-1));
Dest[strlen(Dest)] = '\0';
strncpy_s(Dest, strlen(Dest) + 1, DestAddr, _TRUNCATE);
strcat_s(Dest, strlen(Dest) + 1, SourceHolder);

delete[] SourceHolder;
return Dest;
}

ehsan_faal
شنبه 30 خرداد 1394, 17:19 عصر
درستش کردم :گیج:

#include <iostream>
#include <string>
#include <assert.h>
using namespace std;
char *ReverseCat(char*, const char*);
void main(void)
{
char Str1[] = " C++ Language is the most powerful ";
char Str2[] = ".egaugnaL";
cout << "String1:" << Str1 << endl;
cout << "String2:" << Str2 << endl;
cout << "String1 + Reverse(String 2):" << ReverseCat(Str1,Str2) << endl;

}
char *ReverseCat(char*Dest, const char*Source)
{
//Reverse Part:
char *SourceHolder = new char[strlen(Source) + 1];
assert(SourceHolder != 0);
memset(SourceHolder, '@', strlen(Source)-1);
SourceHolder[strlen(Source) ] = 0;
for (int index = 0,reverseIndex=(strlen(Source)-1);index < strlen(Source);index++,reverseIndex--)
{
SourceHolder[reverseIndex] = Source[index];
}
//Concatenate Part:
char *DestAddr = Dest;
Dest = new char[strlen(DestAddr) + strlen(SourceHolder) + 1];
int Size = strlen(DestAddr) + strlen(SourceHolder) + 1;
assert(Dest != 0);
memset(Dest, '@', (strlen(Dest)-1));
Dest[strlen(Dest)] = 0;
strncpy_s(Dest, strlen(Dest) + 1, DestAddr, strlen(DestAddr));
strcat_s(Dest, Size + 1, SourceHolder);
delete[] SourceHolder;
return Dest;
}

خروجی:

String1: C++ Language is the most powerful
String2:.egaugnaL
String1 + Reverse(String 2): C++ Language is the most powerful Language.

amirtork
شنبه 30 خرداد 1394, 17:24 عصر
من الان میخواستم پست کنم :( :لبخند::لبخند::لبخند:
ولی خب دیگه! نمیزارین که! فقط یه سوال. زیاد سختش نکردی؟؟

ehsan_faal
شنبه 30 خرداد 1394, 17:32 عصر
قبول دارم سخت تر میشه ولی همین تمرینا باعث میشه مباحث مربوط به اشاره گر ها بهتر واسم جا بیفته.