الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.
challenge

نشّط مهاراتك البرمجية: إدخال نص وإخراجه معكوسًا

بدأه مصطفى 36a2 في 17 يونيو 2016 · 3 رد · 1,636 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

بكم طريقة مختلفة يُمكنك عكس نص مُدخل لطباعته على الشاشة ؟

سأبدأ ببعض الطرق، ولنشارك بطرق أخرى لتنشيط المهارات البرمجية، بأسرع/أسهل/أغرب/أبسط طريقة للقيام بذلك.

1- باستخدام string والمرور على عناصرها بالمقلوب

#include <iostream>
using namespace std;

int main()
{
    string s;
    cin>>s;
    for(int i=s.size()-1;i>=0;i--)
    {
        cout<<s[i];
    }
}

2- باستخدام string والتابع reverse من مكتبة algorithm (طريقة سهلة ومباشرة)

#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
    string s;
    cin>>s;
    reverse(s.begin(),s.end());
    cout<<s;

}

3- طريقتي المفضلة :) عن طريق stack واستخدام goto التي لا يحبها أحد

#include <iostream>
#include <stack>
using namespace std;

int main()
{
    char c;
    stack <char>s;
read_c:
    c=cin.get();
    if(c=='\n')
        goto print;
    else
    {
        s.push(c);
        goto read_c;
    }
    print:
    while(!s.empty())
    {
        cout<<s.top();
        s.pop();
    }
}

4- عن طريق string ومعاملتها كـstack (طريقة سهلة ولطيفة)

#include <iostream>
using namespace std;

int main()
{
    string s;
    cin>>s;
    while(!s.empty())
        {
            cout<<s.back();
            s.pop_back();
        }
}

سأستخدم for بدل while

#include <iostream>

int main()
{
    std::string s;
    for(std::cin>>s;!s.empty();s.pop_back())
        std::cout<<s.back();
}

 

من يضيف المزيد  ؟ من يستخدم C ؟

#2

السلام عليكم

هده طريقة باستخدام C

#include <stdio.h>
#include <stdlib.h>
void reversed(){
	char c = 0;
	if(( c = getchar()) != '\n'){
		reversed();
	}
	printf("%c", c);
	
}
int main(int argc, char *argv[]){
	reversed();
	return 0;
}
2
#3

رائعة ! أنت تستخدم الـ stack الخاص باستدعاء الدوال :)

ما رأيك بالتعديل التالي:

#include <stdio.h>

int main(){
	char c = 0;
	if(( c = getchar()) != '\n'){
		main();
		printf("%c", c);
	}

	return 0;
}

شكرًا لمشاركتك الفعالة 

1
#4

السلام عليكم

جميل لقد اختصرت البرنامج

هذه دالة لعكس النص

void reverse_string(char * str){
	char tmp, *src,  *dst;
	size_t len = 0;
	if(str != NULL && *str != 0){
		len = strlen(str);
		src = str;
		dst = src + len - 1;
		while(src < dst){
			tmp = *src;
			*src++ = *dst;
			*dst-- = tmp;
		}
	}
}
1

مواضيع مشابهة