در این مقاله یک برنامه مینویسیم که یک متن دریافت و برعکس یا آینه آن را پرینت میکند.
#include <iostream>
#include <string>
using namespace std;
int main() {
string input;
cin >> input;
for (int i = 0; i < input.length() / 2; i++) {
// swap input[i] with input[input.length() - i]
char tmp = input[i];
input[i] = input[input.length() - i - 1];
input[input.length() - i - 1] = tmp;
}
cout << input << endl;
}
Hello
olleH
اول باید ورودی از تایپ string
را از یوزر دریافت کنیم.
string input;
cin >> input;
و بعد میتوانیم یک حلقه از اول تا وسط متن داشته باشیم؛ مثلا اگر متن Hello باشد کوچکتر از نصف طول آن (۵) که معادل ۲ است تکرار خواهیم داشت که بار اول H با o و بعد e با l (دوم) جایگزین میشوند و l (اول) هم دست نمیخورد.
#include <iostream>
#include <string>
using namespace std;
int main() {
string input;
cin >> input;
for (int i = 0; i < input.length() / 2; i++) {
// swap input[i] with input[input.length() - i]
}
}
با استفاده از .length()
میتوانیم طول input
را دریافت کنیم. (input.length()
معادل ۵ خواهد بود)
پس با حلقه بالا تا طول تقسیم بر ۲ یعنی دقیقا وسط استرینگ حرکت میکنیم. درون حلقه باید input[i]
را با مورد نظیرش از آخر جایگزین کنیم.
میتوان این کار را به شکل زیر انجام داد:
#include <iostream>
#include <string>
using namespace std;
int main() {
string input;
cin >> input;
for (int i = 0; i < input.length() / 2; i++) {
// swap input[i] with input[input.length() - i]
input[i] = input[input.length() - i - 1];
}
cout << input << endl;
}
Hello
olllo
این برنامه اندیس چهار -پنج(طول) منهای i
(صفر) منهای یک- که اندیس آخر است را در اندیس ۰ قرار میدهد که باعث میشود استرینگ به oello تغییر کند. سپس اندیس سه -پنج(طول) منهای i
(یک) منهای یک- یعنی یکی مانده به آخر را در اندیس یک قرار میدهد (که مقدار input را تبدیل به olllo میکند).
پس بخش اول متن به درستی با کارکترهای آخر جایگزین شده اما هنوز بخش آخر input
را تغییر ندادهایم.
#include <iostream>
#include <string>
using namespace std;
int main() {
string input;
cin >> input;
for (int i = 0; i < input.length() / 2; i++) {
// swap input[i] with input[input.length() - i]
input[i] = input[input.length() - i - 1];
input[input.length() - i - 1] = input[i];
}
cout << input << endl;
}
Hello
olllo
یک خط به برنامه اضافه شد تا کارکترهای اول را نیز با کارکترهای آخر جایکزین کند اما خروجی برنامه تغییری نداشت.
علت این مشکل آن است که قبل از تغییر کارکتر آخر به کارکتر اول مقدار کارکتر اول را معادل کارکتر آخر قرار میدهیم (یعنی مثلا مقدار o از آخر استرینگ به اول استرینگ منتقل میشود (oello) و بعد به جای این که H به عنوان آخرین کارکتر قرار بگیرد همان o از اول استرینگ به آخر کپی میشود و عملا هیچ تغییری در کل متن ایجاد نمیکند)
مواقعی که این مشکل به وجود میآید باید قبل از عوض کردن مقدار کارکتر اول که باعث میشود H از متن ما حذف شود آن را در یک متغیر موقتی نگه داریم و بعد از آن متغیر موقت استفاده کنیم تا مقدار کارکتر آخر را تنظیم کنیم.
یک کارکتر(حرف) از استرینگ را میتوانیم در یک متغیر از نوع char
نگه داریم.
کد نهایی ما به این شکل در میآید:
#include <iostream>
#include <string>
using namespace std;
int main() {
string input;
cin >> input;
for (int i = 0; i < input.length() / 2; i++) {
// swap input[i] with input[input.length() - i]
char tmp = input[i];
input[i] = input[input.length() - i - 1];
input[input.length() - i - 1] = tmp;
}
cout << input << endl;
}
Hello
olleH
در این پروژه یک برنامه نوشتیم که میتواند متن ورودی را آینه و یا برعکس کند. خروجی آن را میتوانید در زیر مشاهده کنید.
#include <iostream>
#include <string>
using namespace std;
int main() {
string input;
cin >> input;
for (int i = 0; i < input.length() / 2; i++) {
// swap input[i] with input[input.length() - i]
char tmp = input[i];
input[i] = input[input.length() - i - 1];
input[input.length() - i - 1] = tmp;
}
cout << input << endl;
}
Hello
olleH