تجريد المساحات الفارغة وخطوط جديدة من الأوتار في ج

StackOverflow https://stackoverflow.com/questions/2527698

  •  22-09-2019
  •  | 
  •  

سؤال

لدي بعض المدخلات مثل هذا:

"  aaaaa      bbb \n cccccc\n ddddd \neeee   "

وأنا بحاجة إلى تعقيمه مثل هذا:

"aaaaa bbb cccccc ddddd neeee"

أساسًا:

  • تقليم جميع المساحات الفارغة في بداية ونهاية السلسلة
  • تجريد جميع الخطوط الجديدة
  • قم بتجريد جميع المساحات عندما يكون هناك أكثر من واحد ، ولكن اترك دائمًا مساحة واحدة بين الكلمات

هل هناك أي طريقة سهلة للقيام بذلك أو سأضطر إلى معالجة السلسلة ، Char by char ونسخ المشاريع المناسبة إلى متغير مختلف؟

هل كانت مفيدة؟

المحلول

على افتراض أنه لا يمكنك تعديل سلسلة في مكانها ،

void splcpy(char *s, char *m){ //s is the unmodified string
  int word = -1; //keeps track what was stored in last loop
  while(*s){  //until it ends
    if(!isspace(*s)){
      if(word==0)  *m++ = ' '; //if last char was space, add space
      *m++ = *s++;
       word = 1;
    }
    else{
      if(word == 1)   word = 0; //if last char was !space
      while(isspace(*s++)); //consume all space until end
    }
  }
  *m = '\0'; //end the string nicely
}

char *input = "  aaaaa      bbb \n cccccc\n ddddd \neeee   ";
char *modified = malloc(sizeof(char) * strlen(input));

splcpy(input, modified);

نصائح أخرى

يمكنك استخدام strtok لرمز المعجم مع المعجم ، المحدد بـ " r n t". هذا سيجعل عملك أسهل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top