آینه کردن متن (سی پلاس پلاس)

قسمت 8 از دوره C++

معرفی

نوشتن برنامه

آینه کردن نیمه دوم متن

جمع بندی

معرفی
نوشتن برنامه
آینه کردن نیمه دوم متن
جمع بندی

در این مقاله یک برنامه می‌نویسیم که یک متن دریافت و برعکس یا آینه آن را پرینت می‌کند.

#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

وارد شوید تا پیشرفت خود را ثبت کنید

وارد شوید تا پروژه‌هایی که تکمیل می‌کنید را علامت گذاری کنید و فرایند یادگیری خود را ثبت کنید

دیدگاهتان را بنویسید

برای نوشتن نظر٬ اول باید وارد شوید

مرحله بعد

معرفی

اطلاعات شما با موفقیت ثبت شد. کارشناسان ما در اسرع وقت با شما تماس خواهند گرفت.

از شکیبایی شما متشکریم.