تجريد المساحات الفارغة وخطوط جديدة من الأوتار في ج
سؤال
لدي بعض المدخلات مثل هذا:
" 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". هذا سيجعل عملك أسهل.
لا تنتمي إلى StackOverflow