نقل قول: معکوس کردن یک رشته
نقل قول:
نوشته شده توسط
mahmood3d
با عرض سلام
من تازه شروع به برنامه نویسی با ++c کردم . می خواستم یه برنامه بنویسم که یه رشته ای رو بگیره و کلمه به کلمه اون رو معکوس کنه . مثل : ali reza که در خروجی ila azer چاپ کنه .
همین برنامه رو نوشتم ولی تمام رشته رو معکوس می کنه یعنی همون علیرضا رو به صورت azer ila چاپ می کنه . :لبخند:
فقط زیاد با کدهای پیشرفته ننویسید تا من هم متوجه بشم .:خجالت:
دوست عزيز.شما ميتونيد از تابع strtok كه در هدرفايل string.h هست استفاده كنيد.
اين تابع يه رشته ميگيره و اون رو بر اساس كاراكتر خاصي (كه اينجا كاراكتر space ) هست به چند تكه تقسيم ميكنه و خروجي اون يه آرايه اي از تكه هاي رشته است.
بعد ميتونيد هر عنصر اين آرايه رو به برنامه اي كه خودتون نوشتيد ارسال كنيد تا هر كلمه رو جداگونه معكوس كنه.
نقل قول: معکوس کردن یک رشته
دوستان ببخشید تاپیک قدیمی رو میارم بالا ولی من اینو نوشتم جواب نمیده و داخل ویژوال 2013 هم نوشتم
// ConsoleApplication1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "conio.h"
#include "iostream"
#include "string.h"
#include <stdio.h>
using namespace std;
void main()
{
char a[255];
cin.get(a, 255);
strcat(a, " ");
int z = strlen(a);
int k = 0;
for (int i = 0; i<z; i++){
char m = a[i];
if (m == ' '){
for (int j = i; j>k; j--)
cout << a[j - 1];
k = i;
cout << " ";
}
}
cout << endl;
_getch();
}
نقل قول: معکوس کردن یک رشته
این یک مثال تقریبا کاملی است امتحانش کنید :
#include <iostream>
#include <string>
using namespace std;
void printReverse(const string& s)
{
for (int i = s.length() - 1; i >= 0; --i) cout << s[i];
}
// the original string is reversed ...
// note: C++ strings are mutable ... i.e. can be modified (in place)
void reverse(string& s)
{
int begin = 0, end = s.length() - 1;
char tmp;
while (begin < end) // swap begin and end ... char's
{
tmp = s[begin];
s[begin++] = s[end];
s[end--] = tmp;
}
}
// a new local copy of a string is reversed
string getReverse(string s)
{
int begin = 0, end = s.length() - 1;
char tmp;
while (begin < end) // swap begin and end ... char's
{
tmp = s[begin];
s[begin++] = s[end];
s[end--] = tmp;
}
return s; // returns a new copy of this reversed copy
}
int main()
{
// 0 //
string testStr = "abcdefghijklmnopqrstuvwxyz";
cout << "(0) Original string: " << testStr << endl;
// 1 //
cout << "\n(1) After calling printReverse(testStr): ";
printReverse(testStr);
cout << endl;
// 2 //
// note: C++ strings are mutable ...
reverse(testStr);
cout << "\n(2) After calling reverse(testStr): " << testStr
<< "\nThe original string is now reversed ..." << endl;
// 3 //
cout << "\n(3) After calling getReverse(testStr): " << getReverse(testStr)
<< "\nThe new (temporary) copy is reversed ..."
<< "\nbut the string passed in is still: " << testStr << endl;
// 4 //
cout << "\n(4) Or using reverse_iterator to print reversed: ";
string::reverse_iterator rit = testStr.rbegin();
string::reverse_iterator rit_end = testStr.rend();
while (rit != rit_end) { cout << *rit; ++rit; }
cout << "\nbut the string is still: " << testStr << endl;
// 5 //
cout << "\n(5) Or using const_reverse_iterator to print ... ";
string::const_reverse_iterator crit = testStr.rbegin();
string::const_reverse_iterator crit_end = testStr.rend();
while (crit != crit_end) { cout << *crit; ++crit; }
cout << "\nbut the string is still: " << testStr << endl;
cout << "\nPress 'Enter' to continue ... " << flush;
cin.get();
}
نقل قول: معکوس کردن یک رشته
من از تمام دوستان عذرخواهی میکنم که تاپیک قدیمی رو مجدد بازنویسی میکنم اما میخواستم ببینم چطور میشه این برنامه رو طوری تغییر داد که بتونه رشته معکوس شده هر حرف اون چند بار در جمله تکرار شده .
امیدوارم واضح گفته باشم .
نقل قول: معکوس کردن یک رشته
سلام خدمت اساتید محترم
ابتدا سال جدید رو تبریک میگم
ذوستان من بتازگی شروع به برنامه نوشتن با سی پلاس پلاس کردم و میخوام ک یه برنامه بنویسم که یک رشته دریافت کنه و برعکس اون رو نمایش بده
یادمه ک توی ویژوال بیسیک یه تابع بود ک خودش همه کارارو میکرد اگه این تابع در سی پلاس پلاس هم وجود داره ک معروفی کنید و باهاش برنامه رو بنوسید
اگرم ک نیست عاجزانه ازتون درخواست میکنم یه کد به من بدید یه رشته رو عکسشو تحویل بده فقط لطف کنید خط به خط به صورت کامل و زبان ساده توضیح بدید ک من متوجه بشم
خیلی ممنونم منتظر پاسخ هستم
نقل قول: معکوس کردن یک رشته
سلام،
این مقاله رو مطالعه کنید،
http://www.cplusplus.com/articles/2wA0RXSz/
توی این مقاله، به شما نحوه ی جدا سازی یک رشته رو بر اساس یک کاراکتر خاص توضیح میده(با استفاده از تابع نوشته شده ی explode(const string& s, const char& c)
، و بعد شما میتونید با استفاده از تابع خودتون و یا strrev در هدر فایل string.h، برای هر block از vector خروجی، کار نمایش معکوس هر عبارت انجام بدید.
اگر سوالی بود، در خدمتم.
نقل قول: معکوس کردن یک رشته
ممنون ک پاسخگو سوال من بودید
ولی این منبع اینگلیسی بود لطفا اگه متونید سوال من رو بزبان ساده توضیح بدید اگه زحمتی نباشع
من خوذم به یه جاهایی رسیدم اینطوری ک من متوجه شده
تابع strrev
یک رشته رو معکوس میکنه فکر میکنم باید اینطوری باشه
#include "conio.h"
#include "iostream.h"
#include "string.h"
Int main(void)
{
char a;
cin<<a;
cout>>strrev(a);
Reutrn 0
}
ایا این کد من درسته؟ هدر هاشم درسته؟
ببخشید اگه اشتباه بوده
نقل قول: معکوس کردن یک رشته
سلام
در مورد تابع strrev درست متوجه شدید.
کدی هم که قرار دادید، درست هست، اما باید از آرایه ای از char استفاده کنید، و نه فقط از یک کاراکتر.
اما نکته ای که وجود داره این هست که strrev جزو توابع استاندارد نیست، و هر کامپایلر زبان c و C++ این رو نداره، به خاطر همین من پیشنهاد میکنم به جای این تابع، از تابع reverse در کتاب خانه ی algorithm استفاده کنید.
کار کرد این تابع به صورت زیر است:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
string str;
cin>>str;
reverse(str.begin(), str.end());
cout<<str;
return 0;
}
این کد، رشته ی str رو به صورت معکوس چاپ میکنه.
نقل قول: معکوس کردن یک رشته
ممنون بابت پاسختون دوست عزیز واقعا لطف کردید
اگه میشه کد خودم رو اصلاح کنید همون ک گفتید باید ارایه باشه ، یعنی اگه ارایه باشه چجوری میشه
لطفا توضیح بدید
ممنون از لطفتون
نقل قول: معکوس کردن یک رشته
سلام
کد شما به دلیل استفاده از نسخه های قدیمی تر C++ در واقع از حالت استاندارد خارج هست و من باز هم پیشنهاد میکنم از نسخه های جدید تر استفاده کنید، با این حال، این کدی هست که من اشکالاتی رو که توش میبینم رفع کردم، اگر مشکل دیگه ای داشت بفرمایید:
#include "conio.h"
#include "iostream.h"
#include "string.h"
int main()
{
char a[10];
cin>>a;
cout<<strrev(a);
return 0;
}
1- return درست هست، نه Reutrn
2- علامت جریان ورودی برای cin به صورت cin>>
هست نه cin<<
3- سی پلاس پلاس زبانی حساس به حروف بزرگ و کوچک هست، بنابراین باید در نوشتن دقت کنید، int درست هست و نه Int.
نقل قول: معکوس کردن یک رشته
ممنون واقعا کمک خیلی بزرگی کردید
ببخشید ک انقده سوال میکنم ولی سوال اخرمه
تو کد شما همونی ک خودتون پیشنهاد کردید این خط چیکار میکنه؟
using namespace std;
و میشه خواهش کنم در باره خط
reverse(str.begin(), str.end());
کمی توضیح بدید؟
چرا باید اون دوتا تابع ازشون استفاده بشه منضورمstr.begin و str.end هستش
ممنون
نقل قول: معکوس کردن یک رشته
using namespace std در این کد، در واقع داره محل تعریف cin و cout و string رو مشخص میکنه.
برای کنترل حجم انبوهی از توابع و کلاس ها، از مبحثی به نام فضای نام استفاده میکنیم، برای مثال اگر ما در برنامه ای، دو تابع با نام و آرگومان های یکسان داشته باشیم، برای مشخص کردن هر کدام، از فضای نام به خصوصی استفاده میکنیم، برای مثال:
#include <iostream>
#include <string>
#include <algorithm>
namespace first
{
void sayHello()
{
std::cout<<"Hello!"<<std::endl;
}
}
namespace second
{
void sayHello()
{
std::cout<<"Hello!"<<std::endl;
}
}
int main()
{
//+++++++++++++
first::sayHello();
second::sayHello();
//+++++++++++++
return 0;
}
در کد بالا، با توحه به اینکه ویژگی های دو تابع کاملا شبیه به هم هست، برای اینکه در برنامه درچار مشکل نشویم، از دو فضای نام مختلف استفاده کردیم.
استفاده از فضای نام دو روش عمده داره:
1- اعلام در ابتدای برنامه مثل using namespace std;
2- اعلام در پشت موارد مورد استفاده از آن فضای نام، مثل std::cout
برای استفاده از روش دوم، باید قبل از عضو نظر در آن فضای نام، ابتدا اسم آن فضای نام رو بیاریم، بعد علامت تفکیک حوزه یا همون :: ، بعدش اسم عضو مورد نظر، مثل std::cin
در مورد اون دو تابع هم، کار اون دو تابع برگردوندن اشاره گر به ابتدا و انتهای رشته ی مورد نظر ما هستن.
str.begin() اشاره گری به ابتدای رشته و دیگری اشاره گری به انتهای رشته برمیگردونن، و علت استفاده هم این هست که تابع reverse برای انجام فرایند معکوس سازی، نیاز به دانستن محدوده ای هست که باید عمل معکوس سازی رو روش انجام بده، و از انجایی که ما میخواستیم کل رشته رو معکوس کنیم، پس دو اشاره گر به ابتدا و انتهای رشته فرستادیم.
نقل قول: معکوس کردن یک رشته
#include <iostream>
#include <string.h>
#include <cstring>
using namespace std ;
int main()
{
int i , a;
char s[] = "matsah hedaznasaH ardaS naM";
for ( i = strlen(s); i >=0 ; i--)
{
cout << s[i];
}
}:بوس::لبخندساده::لبخندساده: ک کنم به حد کافی سادست!