עבור לתוכן

מחפש פונק' לטיפול במערך C

Featured Replies

פורסם

אני מחפש פונקציה שמקבלת מערך תווים עם רווחים וטאבים ומחזירה את אותו מערך ללא הרווחים והטאבים.

אני מאמין שקיימת פונק' כזו באחד מקבצי ה-header הבסיסיים של השפה, רק שלא מצאתי אחת כזו...

תודה !!

פורסם

למה שתהיה פונקצית ספריה כזו? זה דבר מאוד ספציפי.

אבל אתה יכול מאוד בקלות לבנות כזו פונקציה בעצמך.

(תשתמש בפונקציית הספריה isspace כדי לבדוק אם כל תו הוא רווח/טאב או לא)

פורסם
  • מחבר

אז אם אני בונה אותה, אז האלגוריתם זה למעשה להריץ את isspace בלולאה על המערך ועבור כל איבר עד ההגעה ל- /0 שמוחזר לי עבורו 0 אני מעתיק אותו למערך חדש ששמתי בצד?

אגב טאב ורווח, כ"א תופס מקום אחד במערך נכון?

פורסם
  • מחבר

אז אם אני מכניס בלוק כזה:


void func(char s[])
{
int i,j,n;
j[100];

for (i=0 ; s[i]!='/0' ; i++)
{
if (isspace(s[i]) ==0 )
{
temp[j]=s[i];
j++;
}

}

for (n=0 ; j[n]!='/0' ; n++)
{
printf("%c/t",j[n]);
}
}

אז זה תקין בשביל נניח להדפיס אותה על המסך לאחר המיון? (בהנחה שאכן מערך לא עובר את הגודל המקס' של 100.) כלומר, הוא אכן יידע להציב את /0 במערך החדש בסוף התווים גם אם []s גודלו יהיה קטן מ-100 ?

תודה

פורסם

קודם כל, הסלאשים שלך הפוכים (זה '0\' ולא '0/', לדוגמה), וחוץ מזה קראת למערך שלך פעם j ופעם temp (בנוסף למשתנה j שכבר מוגדר לך...)

ולגבי שאלתך - לא יודע, למה שלא תבדוק בעצמך? תחשוב האם התוכן של הלולאה יתבצע באיבר האחרון במערך (זה ששווה ל-'0\').

פורסם
  • מחבר

כתבתי את זה:


#include <stdio.h>
#include <ctype.h>
#include <string.h>


void funcc (char s[])
{

int i,j,n;
char temp[100];


for (i=0;s[i]!='\0';i++)
{

if ( ( isspace(s[i]) ) ==0 )
{
temp[j]=s[i];
j++;
}
}

for (n=0;temp[n]!='\0';n++)
{
printf("%c\t",temp[n]);
}
}


int main()

{

char arr[]="ab c dd";
funcc (arr);
return 0;
}

וקיבלתי segmentation fault

:nixweiss: הפעם באמת לא עשיתי משהו שגוי....

פורסם

קודם כל, תדאג תמיד לאתחל את המשתנים שלך.

וטעות שניה, מה עם תו הסיום של מחרוזת הפלט?

פורסם
  • מחבר

אם אני מאתחל את i להיות 0 לפני הלולאה, אז בלולאה אני אשאיר את זה ככה:

for ( ; s[i]!='\0' ; i++)

?

הרי אין טעם לאתחל פעמיים אותו משתנה באותו קטע קוד... הרי אורך החיים שלו בגלל ההגדרה שלו לפני הלולאה הוא כל הפונק'. או שהתכוונת גם להגדיר אותו וגם לאתחל אותו בתוך ה-for ?

ובנוגע לתו הסיום של מחרוזת הפלט:

הכוונה להריץ נניח counter שיספור כמה התקדמתי בהצבה במחרוזת ה"אינסופית" (גודל 100) שלי ובהצבה האחרונה +1 להכניס לו '\0' וככה אני לא אקבל את אותו error?

פורסם

התכוונתי למשתנה j

זה לא משנה היכן מאתחלים, אבל לפני שימוש ראשון צריך לאתחל.

את i אתה מאתחל בלולאה, ואין בעיה עם זה.

אבל היכן את j?

ואחרי הלולאה תוסיף

temp[j]='\0';

פורסם
  • מחבר

עובד כמו קסם. :xyxthumbs:

תודה !!

פורסם

יכול להיות שמה שאתה באמת רוצה זה strtok או אחת מגרסאותיה.

  • 1 חודש מאוחר יותר...
פורסם

סליחה על ההקפצה...

אבל, אם אני למשל לא יכולה להשתמש בisspace (לא שאני יודעת מה זה בככל), אני יכולה לעשות את אותו הדבר:

לקלוט מחרוזת , ע"י לולאה לבדוק אם יש רווחים או טאבים (השאלה היא להשוות את זה למה? גם לאפס?) ואיפה שאין רווחים או טאבים עד '0\' להכניס למחרוזת אחרת שאני יוצרת?

:s05:

פורסם
  • מחבר

את יכולה לבדוק את קוד ה-ASCII של טאב \ רווח, לחילופין להכניס תחת מרכאות (לא כפולות) את הטאב בתנאי || עם הרווח.

כמובן שהלולאה תסתיים ב-\0 מן הסתם.. ברור שניתן לעשות strlen אבל מיותר כי זה סתם לעבור על המערך פעם נוספת ללא צורך.

פורסם

אה....תודה.לא חשבתי על זה.

אתם פשוט גדולים! :yelclap:

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים