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

هل من ملاحظات حول هذا الكود ...؟؟؟

بدأه yacinebrca في 23 أبريل 2014 · 4 رد · 830 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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


 


اخواني الكرام   :)  :) ..


 


اليكم هذا الكود الخاص بالسلاسل النصية


 


 يقوم المستخدم بادخال نص  بحيث يكون هذا النص  به مجموعة من الفراغات  بين الكلمات


 


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


 


أريد ملاحظاتكم حول هذا الكود ...


 


ربمابه أخطاء


 


... :huh:


....


.. او الكود طويل ...


 


:mellow:


....


...او تنقصه بعد اللمسات ...


 


:blush:


...


 


فأنتم أهل الخبرة .. :)


 


أرجوا ان لا تبخلوا علينا بالرد ... ;) ;)


#include <stdio.h>

#include<string.h>

#include <stdlib.h>

#define M 100

#define ligne printf("\n\n");

#define cc printf("-----------------------------------------------------------------------------------------\n");


 void nettoyerMI(char*,int,int);

 int recherchesp(char*,int*,int*);


int main(int argc, char *argv[])

{

  char x[500];

  int a[M],b[M],y=0,m,i;


  ligne

  puts(" * entre le texte :");cc

  gets(x);cc


  y = recherchesp(x,a,b);


  for(i=y-1;i>=0;i--)

                     nettoyerMI(x,a,b);

  ligne

  puts(" * Apres Traitement  ..........");

  ligne 

  cc puts(x);cc

  ligne                     

  system("PAUSE");	

  return 0;

}



  //     ***********                     les Fonctions                 **************


 // Nettoyage de l'espace entre les deux mots

 void nettoyerMI(char *ch,int a,int b){


      int i;


      for(i=a+1;b<strlen(ch);i++)

                                 ch=ch[b++];

      ch='\0';  

      }




// Trouver  ( ..Les indices ..tableau char* ..)  de caractere vides ' ' ..et des caractare qui ne sont pas vide..... z "

 int recherchesp(char *t,int *p,int *N){


      char w=' ';

      int r=0,i,y=0,z=0;


      for(i=0;i<strlen(t);i++){


                               if(r==0){

                                       if(t==w){

                                                 p[y++]=i;

                                                 r=1;

                                                  }                                         

                                       }

                               if(r==1){

                                       if(t!=w){

                                                 N[z++]=i;

                                                 r=0;

                                                  }                                

                                       }                             

                               }


      return y;

      }

2 −1

elearning_image.jpg

#2

أحسنت أخ ياسين , الكود جيد , ولكن حاول تجنب استخدام define اذا كانت ستؤدي الى صعوبة قراءة الكود وأيضاً ,

كان يمكن كتابة كود يقوم بنفس العملية بشكل أبسط من ذلك انظر

#include <cstdio>#include<cstring>#include <cstdlib>#define M 100int main(int argc, char *argv[]){    char x[500];    int a[M],b[M],y=0,m,i;    puts(" * entre le texte : ");    gets(x);    puts(" * Apres Traitement  ..........");    for(i=0;x!=0;i++)    {        if(x==' ')        {            putchar(' ');            while(x==' ')i++;        }        putchar(x);    }    putchar(10);    system("PAUSE");    return 0;}

وفقك الله

#3

طريقة جميلة .. الان اصبحت انظر الى الكود الخاص بي

على انه جريدة عربية .......هههههه

لكن يبقى مع هذا ان الكود الخاص بي يقوم بتغيير محتوى النص جذريا ...

انت قدمت طريقة جيدة +كود صغير ومفهوم...لكن تتلاعب بالطباعة.

المهم شكرا على النصائح..بارك الله فيك

.

1

elearning_image.jpg

#4

شئ آخر

حاول الإستغناء عن الدالة gets واستخدم fgets مكانها

gets(str);

ستصبح 

fgets(str,100,stdin);

حيث 100 أقصى قيمة تتم قرائتها

واعلم أن gets لم تعد standard library وقد تحدث ثغرة في برنامجك إن لم تكن حذرا لذا من باب الآمن استخدام fgets

والسلام على من اتبع الهدى

1
#5

بارك الله فيك اخي...العفو في تاخر الرد...........


elearning_image.jpg

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