كيفية اخلاء سلسلة في لغة (how to empty a string) في لغة ِC


التعليقات

  • ابحث عن حجز وإخلاء الذاكرة في لغة سي -Memory Allocation- ستستخدم دوال calloc و malloc و free

  • الدرس بالعربية يُسمى المؤشرات Pointers

  • لا أعلم ما الذي تريده تحديداً، إن كنت فقط تريد أن تكون هناك قيمة إبتدائية مع كل بداية حلقة يكفيك أن تقوم بتعريف مصفوفة سلسة الرموز داخل الحلقة كما في المثال التالي:

ما المُشكلة في استخدام دالة strcpy لهذا الغرض؟ ستستخدما لنسخ سلسة في مُتغير آخر للعمل عليه دون تأثر القيمة في المُتغير الأول وبعدها ستقوم بمُقارنة السلاسل

السؤال غير واضح,

أولا لا يوجد شيء اسمه string في الc, بل هناك character array تنتهى ب"كود الاسكى صفر", لا يهم ما بعدها, ما بعدها هو قيم عشوائية. اذا كان اول char في الstring هو "\0" فاذا الstring فارغ.

لتحميل الstring بقيم جديدة يمكنك ببساطة استخدام strcpy, و هي تقوم بنقل مصفوفة الchar الى الstring و تضع "\0" في اخره لتعرف الدوال الأخرى ان هذه هي نهاية الstring. كما يمكنك استخدام loop لتقوم بتحميل ما تريده في الstring.

في الكود الذى كتبته شيء خطير, هو انك حجزت عدد موازى لكلمة value لهذه المصفوفة, فاذا قمت بكتابة شيء أخر أطول سوف يحدث Access overrun,

هذه الصيغة أفضل :

char string[251];

strcpy(string,"value");

for(int I=0;i<251;i++)

string[I]='\0';

و يمكنك استخدام memset أيضا.

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

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

 \0alue

إذا تعاملت معاها كstring فهي string فارغةوإذا تعاملت معاها كمجرد خانات عادية فهي غير فارغة وهذا هو سبب المشكلة لديك.

ما يميز الstring هو وجود ال 0\ وفي لعبتك الstring الاصلية

\0alue\0

تقوم بكتابة حرف جديد من البداية فى كل مرة وبالتالي تقوم بمسح اول حرف وهو 0\ وبالتالي تتعامل الدالة مع

aalue\0

وهذا ليس ما تريده، ماتريده هو التعامل مع الأحرف الحالية فقط وليس أبعد من ذلك وبالتالي تحتاج لإيقاف عملية قراءة الخانات بأن تضع 0\ بعد الحرف الحالي هكذا بفرض إدخال a ثم q ثم x

 a\0lue\0
aq\0ue\0
aqx\0e\0

وهذا هو الكود للتوضيح

int len=strlen(string);
string[len]='a';
string[len+1]='\0';

بصراحة لم أفهم هل تريد من المستخدم ادخال space لتقوم بتنفيذ كود ما مثلا أم تريد قراءة نص به مسافات كهذا مثلا

     char input[100];
     cin.getline(input,sizeof(input));
     printf(input);

ما مشكلة الكود الخاص بgetchar

إذا كنت متأكد من إدخال Enter بعد كل حرف فيمكنك التحايل هكذا

 c = getchar();
 putchar(c);
  getchar();
 c  = getchar();
  putchar(c); 

أما غير ذلك فجرب الآتي

   while((c=getchar()) != EOF ){

              if(c!=' '){
                    putchar(c);
             }
      }

برمجة

المواضيع والنقاشات المتعلقة بالبرمجة بشكل عام او لغات البرمجة التي لايوجد لها مجتمعات فرعية.

24.6 ألف متابع