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

اين الخطأ في البرنامج هذا؟؟

مغلق
بدأه مبرمجة ++C في 25 أكتوبر 2004 · 2 رد · 380 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

ماهو الخطأ في هذا الكود

البرنامج عبارة عن فنكشن تجزء الكلمات بعدين ابي اطبعها بالعكس

بس ماضبط مادري ليه؟؟

#include <iostream.h>
#include <cstring>    //prototype for strtok

int main()
{
   char text[100], output[60][20];  
   //the string contain maximum 60 tokeniz and 20 letters.

   char *tokens = text , *ptr;
   int i = -1, j;

   cout << "\nEnter a line of text not more than 100 character: \n";

   //to input a line of text contains speases or coma
   cin.getline(text , 100, '\n');  

   tokens = strtok( text , " ");
    ptr = tokens;

   while( tokens != NULL )
   {
      i++;
      cout << tokens << '\n';
      j = 0;
      ptr = tokens;
      while (*ptr)
   {
         output[j] = *(ptr++);
         j++;
   }
      output[j] = '\0';

   }

    //print sentence after tokeniz
   cout <<"The sentense after tokeniz is : \n";
   for (; i>=0; i--) 
   {
      for (j=0; output[j]!='\0'; j++) 
   {
       cout << output[j];
   }
       cout << " ";
   }
return 0;
}
#2

السلام عليكم,

الخطء الأول وهو أن الحلقة while تبقى شغالة إلى الأبد. ويمكن أن نسهل كتابة البرنامج وبعجالة قمت بهذه التغييرات ويمكن دائما ان نكتبه بطريقة أحسن :

#include <iostream.h>
#include <cstring>    //prototype for strtok


void Reverse(char* txt,char* RevTxt)
{
	int ll=strlen(txt);
	for (int i=0; i<ll;i++)
	{
  RevTxt=txt[ll-1-i];
	}
	RevTxt=0;
}

int main()
{
  char text[100];  
  char RevTxt[100];
  //the string contain maximum 60 tokeniz and 20 letters.

  char *tokens = text; //, *ptr;

  cout << "\nEnter a line of text not more than 100 character: \n";

  //to input a line of text contains speases or coma
  cin.getline(text , 100, '\n');  

  tokens = strtok( text , " ");
//   ptr = tokens;

  while( tokens != NULL )
  {
   Reverse(tokens,RevTxt);
   tokens = strtok( NULL, " ");
   cout << RevTxt << "\n";
  }

return 0;
} ///////////////////////////////////////////////////

الدالة Reverse هي ستقوم بقلب الكلمة حيث نعطيها في البارامتر الأول الكتابة التي نريد قلبها وفي البارامتر الثاني تعطينا الكلمة مقلوبة.

وحين نستعمل strtok يجب كل مرة يعثر على الكلمة الأولى أن نستعمل

tokens = strtok( NULL, " ")

حتى يبدأ في البحث عن الكلمة الثانية.

إلى اللقاء.

#3

جزيت خيرا

هذا الموضوع مغلق.

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