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

سؤالين عن C++ ،، كيف اكتب كم كلمة كبيرة في متغير + كيف انفذ امر واجمع بين فاريبل و متغير

رائج
بدأه CPP-Programmer في 18 سبتمبر 2008 · 65 رد · 6,626 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

كيفكم شباب ؟ ان شاء الله بخير

لازلت مبتدئ في لغة C++ لكن لدي سؤالين لا اعرف اجابته ضروري جداً وهو

اذا اريد احط بمتغير (فاريابل او Variable) ونوعه char شوية كلام كتير شوية يعني مثلا 15 او 20 حرف جربت اكتب

#include<iostream.h>

int main(){

char s;

s = 'ahmed_ahmed';

cout << s;

}

طبعاً طلع خطأ انه ده كتير الكلام ده ومنفعش للأسف .. طيب فيه حل او شئ غير char أحط فيه كلمتين زيادة زي ahmed_ahmed ??

# السؤال الثاني :

اريد انفذ امر من الدوس وهو get http://www.google.com وهو يحضر سورس كود المواقع

فجربت اكتب

#include<iostream.h>

#include<stdlib.h>

int main(){

char wsn;

cout << "Enter Website name : ";

cin >> wsn;

system("get",wsn);

}

طبعاً منفعش .. ومعرفتش ازاي اعمل برنامج ينفذ الامر ده .. وجربت احطه في متغير وطلعت المشكلة الاولى ؟؟؟ ممكن حل كيف انفذ الكود ؟؟؟ او حتي ازاى اجمع من بين متغير و سترنج في نفس سطر نفس الامر !! ؟؟

اعذروني مبتدئ في C++ لكن احتاج احتاج ان اتعلمها وان شاء الله اتعلمها

وشكراً مقدماً يا شباب وانتظر ردكم حتي لو على سؤال واحد منهم واسف على الازعاج

والسلام عليكم

Just C++ Life :)

#2

هذا بالسنبة للسؤال الاول

  1.  
  2. #include<iostream.h>
  3. int main(){
  4. char s[]="ahmed_ahmed";;
  5.  
  6. cout << s;
  7. }
  8.  

tvquran_6.gif

#3

المتغير من نوع char يقبل حرف واحد فقط, ما تريد عمله يمكن بواسطة استخدام Array من الchar كما أوضح لك الأخ فهد في مثاله

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#4

فهد الشلوي : جزاك الله خيرا الله يكرمك ما قصرت بالسؤال الاول وتم حل اول مشكلة وفهمت انه لازم اراي وانك تخليه مفتوح وماتخليه 3 او 4 او 5

bashmohandes : جزاك الله خيرا ماقصرت وتمام انك وضحت لى اكثر واكثر

تم حل المشكلة الاولي بحمدالله

انتظر السؤال الثاني

وماشاء الله انكم رديتم بسرعه

جزاكم الله خيرا

وانتظر السؤال الثاني ان شاء الله :D

Just C++ Life :)

#5

وهذا بالنسبه للسؤال الثاني:

  1.  
  2. #include<iostream.h>
  3. #include<string.h>
  4. #include<stdlib.h>
  5. int main(){
  6. char adderss[]="http://www.google.com ";;
  7. char command[]="get ";
  8. strcat(command,adderss);
  9. system(command);
  10. }
  11.  

tvquran_6.gif

#6

اخى فهد , بارك الله فيك

لكن ما فائدة هذا الكود :

system(command);

تم تعديل هذه المشاركة بواسطة Omar Eladel في 18 سبتمبر 2008 في 06:14

#7

حياك الله أخوي عمر.

في شاشة الكنسل عندما تريد أستعراض الملفات تكتب:

dir

هل تريد تنفيذ الأمر نفسه من السي بلس بلس فقط أكتبه

  1. system("dir")
  2.  

أذن الامر سستم ينفذ أومر الكونسل

  1. system(command);
  2.  

هي نفسها لو كتبتها في الكونسل بالشكل التالي

 get  http://www.google.com

تم تعديل هذه المشاركة بواسطة فهدالشلوي في 18 سبتمبر 2008 في 07:14

tvquran_6.gif

#8

بارك الله فيك اخى فهد

لكن عندما جربت البرنامج , اعطانى خطأ فى نافذة console

الخطأ هو التالى :

'get' is not recognized as an internal or external command,

operable program or batch file.

ما طبيعة هذا الخطأ ؟ و ما حله ؟؟

#9
Omar Eladel كتب:
بارك الله فيك اخى فهد

لكن عندما جربت البرنامج , اعطانى خطأ فى نافذة console

الخطأ هو التالى :

'get' is not recognized as an internal or external command,

operable program or batch file.

ما طبيعة هذا الخطأ ؟ و ما حله ؟؟

طبيعة الخطأ أن هذا الأمر عير متوفر في الـ dos

#10

بارك الله فيك اخى djug

لكن كيف يتم تنفيذ المطلوب بهذا الشكل ؟ و كيف استخدم الاخ فهد هذا الامر لجلب كود الصفحة ؟؟

بارك الله فيكم

#11

حبيبي فهد الشلوي تسلم .. لكن ممكن اخر سؤال ؟؟

ايش فائدة او ايش وظيفة دالة strcat ??

هل تدمج بين متغيرين او ايش ؟؟

انتظر ردك

< صؤاحة ما احب انفذ اوامر وخلاص لانى عاوز اتعلم c++ كويس وان شاء الله اتعلمها

انتظرك

Just C++ Life :)

#12
strcat(s1,s2)

تعمل String Concatenation و معناها انها تدمج s2 فى نهاية s1 و تخزين الناتج فى s1

#13

عمر قد أجابك djug بالجواب الوافي .

لم أجرب الأمر لكن قد يكون صاحب السؤال يستخدم إصدارة قديمة من نظام دوس.

أما بالنسبه لوظيفة strcat فهي مثل ما قال عمر . فقط تضيف نص الى نص.

tvquran_6.gif

#14

تمام يا عمر وفهد :D جزاكم الله خيراً

معلش اخر سؤال وان شاء الله حيكون الاخير عشان اخلص البرنامج بتاعى اللى قلتلكم عليه اللى بجيب السورس كود بتاع المواقع ، وطبعا فهد كان كاتبلي اسم الموقع جوجل وهو ثابت طيب اذا اردت اخليه يستخدم من قبل المستخدم او المستخدم هو اللى يختاره ؟؟

انا كتبت كدة :

#include<iostream.h>
#include<string.h>
#include<stdlib.h>
int main(){
char cmd[] = 'get ';
char website[];
cout << "Enter Website Name : ";
cin >> website;
cout << "\n Website Setted :";
cout << website;
cout << "\n Please Wait While Source Get .. \n";
strcat(cmd,website);
system(cmd);
}

طلعلى 2 اخطاء ؟

اسف ازعجتكم .. انتظركم ان شاء الله

تم تعديل هذه المشاركة بواسطة CPP-Programmer في 18 سبتمبر 2008 في 18:36

Just C++ Life :)

#15
  1.  
  2. #include<iostream>
  3. #include<string>
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8. char cmd[] = "get ";
  9. string website;
  10. cout << "Enter Website Name : ";
  11. getline(cin, website);
  12. int len = website.length();
  13. const char* site = new char[len];
  14. site = website.c_str();
  15. cout << endl << "Website Setted : " << site << endl;
  16. cout << "Please Wait While Source Get .. " << endl ;
  17. strcat(cmd,site);
  18. cout << "--------------------------------" << endl;
  19. system(cmd);
  20. system("pause");
  21. }
  22.  
  23.  

السطر 13 : مؤشر لمصفوفة ديناميكية من الحروف

السطر 14 : لتحويل الـ string الى متغير من نوع char

شغال الحل ده ولا لا ؟؟

المشكلة عندى ان امر get لا يعمل اصلا

#16

اوامر التطبيقات دائما من اختصاص طبقة التطبيقات >> http , ftp , telnet ..

تعامل عن طريق الدوس بواسطة اي برتوكول تلاحظ انه يخدم الغرض المطلوب ..

سبحان الله , الله اكبر , ولله الحمد

#17

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

اخوي Omar Eladel

الحمدلله اشتغل الكود وظهر لى السورس كود بتاع الموقع وجربته وتمام شغال ولكن لدي بعض الاستفسارات حول هذا الكود عشان افهمه تمام بعد اذنك ..

1#- هل using namespace std; تحضر جميع المكتبات نعم او لا ؟ واذا لا فمافائدتها؟

2#- ما معني getline(cin, website); ومادالة getlineوفائدتتها و ايش هوcin اللى بعد القوس؟ ،، وطبعاً website هو اسم الString وهذه مفهومة ان شاء الله ..

3#- ماهي فائدة دالة website.length(); اول كلمة وهي website معروفة وهي السترنج اللى بينكتب فيه اسم الموقع لكن الكلمة اللى بعدها ايش هي + فائدتها في البرنامج ؟

4-# const char* site = new char[len];

const = شئ ثابت لا يتغير علي حسب علمي

char* = انا عارف تشار ، لكن النجمة اللى بعدها ايش فائدتها ؟ شفتها اكثر من مرة في اكثر من برنامج لكن ما فهمتها؟

site = ايش هذا فين ?? لانى ما فهمت الكلمة اللى قبلها

new char[len] = هل هذه لأضافة متغير جديد من نوع تشار ؟؟ او ماذا ؟؟ وماذا فعلت بالمتغير Len ?

انت قلتلى انه مؤشر لمصفوفة دينيماكية ؟ للأسف ما فهمت ياريت توضحلى اللى فوق واسف جدا

واسف جداً

او ياريت شرح للكود بأختصار (بأختصار افهمه:D)!!

وشكرا جدا يا عمر

اسف جدا ازعجتكم بما فيه الكفاية ..

Just C++ Life :)

#18

#1

 using namespace std;

هو لتسهيل كتابة اى كود

فبدون هذا السطر , ستضطر لكتابة std::cout , std::cin , std::string و ما شابه ذلك

2# استخدمت getline() لأن لو الكلام فيه مسافة فارغة لن تضمن باستخدام cin لأن cin لا يتعامل مع ما بعد المسافات

3# website.length() هى دالة لجلب عدد حروف الـ string , مثلا cpp عدد حروفها 3

4# انا استخدمت مؤشر لعمل مصفوفة ديناميكية , هذا موضوع المؤشرات يجب ان تفهمه من بدايته حتى تستطيع التعامل معه , فلا ينفع شرحه فى سطور قليلة

راجع هذا الموضوع , فصل المؤشرات

اسف انى لا استطيع شرح الجزئية #4 فهى فعلا اكبر منى بكثير

وفقكم الله

#19

Omar Eladel فهمت كله الا الاخيرة

رحت حملت كتاب بتاع الهيثم الله يكرمه ويكرمك ،،

وقرأت نصفه تقريباً وفهمت شوية الحمدلله

لكن برده دماغي وجعتني :(

ومفهمتش كله

وقررت انه اقرأ شوية كتب عن المبتدئين في C++ واعرف الحجات الاساسية وكل الكلام ده بعدها بقي ابقي اشوف المؤشرات ،،

وربنا يسهل ....

Just C++ Life :)

#20
اقتباس
هل using Namespace std; تحضر جميع المكتبات نعم او لا ؟ واذا لا فمافائدتها؟

السطر السابق يفيد بأنه سيتم استخدام الكثير من اعضاء فضاء الاسماء std داخل البرنامج , وكما هو معروف بأن جميع محتويات الملف iostream معرفة داخل فضاء الاسماء std

بعدين بما ان اسم الموقع غالبا لايتجاوز 200 حرف ولايمكن ان يحتوي على مسافات , فيمكن الاستغناء عن المؤشرات

	char cmd[] = "get ";
	char website[200];
	cout << "Enter Website Name : ";
	cin>>website;
	cout << endl << "Website Setted : " <<website << endl;
	cout << "Please Wait While Source Get .. " << endl;
	strcat(cmd,website);
	cout << "--------------------------------"  << endl;
	system(cmd);
llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#21

اضافة صغيرة جداً tiny++

أطول مسار URL يمكن جلبه باستخدام get هو 2,048 حرف يعني 2 كيلو بالضبط زيادة على حجم البرنامج، في IE.

هل هذا ينطبق على system("get") لا أعلم.

لكي لا تتعب نفسك في التفكير بما قد يكون طول الرابط.

اما لو كان الطلب post فليس هناك حدود على الطول. للانتباه.

get يعني تطلب موقع بدون استخدام بارامترات, مثلا http://www.arabteam2000.com

post ممكن يكون فيه بارامترات, مثلا http://www.arabteam2000.com/?act=whatever&type=whocares

http://support.microsoft.com/kb/208427

تم تعديل هذه المشاركة بواسطة Xacker في 19 سبتمبر 2008 في 03:07

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#22

هذه طريقة أفضل للتعامل مع النصوص ، باستخدام مكتبات السي++ بدلاً من مكتبات السي ،

#include <string>
   #include <iostream>

   using namespace std;

   int main()
   {
   string mystr1("hello, ");
   string mystr2("your name is");
   string yourName("");
   getline(cin, yourName);
   string completeMessage("");
   completeMessage = mystr1 + mystr2 + yourName;
   cout << completeMessage;
   }

لماذا هذه الطريقة أفضل؟

حسنًا انظر لهذين الاقتباسين :

Omar Eladel كتب:
  #include<iostream>
#include<string>
using namespace std;
 int main()
{
char cmd[] = "get ";
string website;
cout << "Enter Website Name : ";
getline(cin, website);
int len = website.length();
const char* site = new char[len];
site = website.c_str();
cout << endl << "Website Setted : " << site << endl;
cout << "Please Wait While Source Get .. " << endl;
strcat(cmd,site);
cout << "--------------------------------" << endl; system(cmd);
system("pause");
}

time1 كتب:
	char cmd[] = "get ";
	   char website[200];
	   cout << "Enter Website Name : ";
	   cin>>website;
	   cout << endl << "Website Setted : " <<website << endl;
	   cout << "Please Wait While Source Get .. " << endl;
	   strcat(cmd,website);
	   cout << "--------------------------------"  << endl;
	   system(cmd);

في هذين المثالين نجد أن دالة سي strcat تكتب على مصفوفة الأحرف cmd[] فوق الحجم المعرفة به ، أي أن حجم هذه المصفوفة في الأساس 5 ، لكن الدالة strcat تكتب فوقها أكثر من 5 ( كم العدد بالضبط ، هذا يعتمد على ما سيكتبه المستخدم ) ، مما يؤدي إلى الكتابة على البيانات الأخرى المجاورة ل cmd وهذا سبب ما يعرف بفيضان الناقل ( buffer overflow ).

دائمًا وأبدًا استعملوا نصوص سي++ وليس سي.

تم تعديل هذه المشاركة بواسطة عمـــرو في 19 سبتمبر 2008 في 04:06

#23

هذا فضلاً عن أشياء مثل هذا التعيين مثلاً :

const char* site = new char[len];
site = website.c_str();

هذا تعيين مؤشرات وليس تعيين نصوص ، بمعنى أن المساحة المحجوزة في السطر الأول باستخدام new لم تستخدم ، والمؤشر الذي كان يشير إلى هذه المساحة تم تغيير وجهته في السطر الثاني ليشير إلى نص سي المرجع من website.c_str() (وهذا له مشكلة أخرى لا مجال لها الآن).

مثل هذه الأخطاء لا يمكن أن تحدث مع نصوص سي++ .

تم تعديل هذه المشاركة بواسطة عمـــرو في 19 سبتمبر 2008 في 04:14

#24

أتصور يا أخ عمرو أن الهدف للأخوة من وراء الأكواد المذكورة في الصفحة الأولى هو التوضيح ومحاولة التبسيط بشئ قد يكون صاحب الموضوع يتعامل معه الآن أكثر، من المعروف أن دالة strcat خطيرة ويحذر منها، ولا أعتقد أن هذا يخفى على الأخوة - شكراً على التذكير بأي حال بارك الله بك.

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#25

نعم يا أخ Xacker بالتأكيد هذه الشفرات للتوضيح ، ما أود أن ألفت الإنتباه إليه فقط هو أفضلية استعمال مكتبات سي++ بدلاً من مكتبات سي على الأقل للمبتدئين ، فمبتكري سي++ بذلوا جهدًا كبيرًا في محاولة تفادي خطورة مكتبات سي ، وواجبنا على الأقل هو عدم نصح المبتدئين باستعمال مكتبات سي حتى لا ندخلهم في متاهات البحث عن أخطاء في البرنامج ليس لها سبب واضح.

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…