מחפש פונק' לטיפול במערך C - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

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


iem

Recommended Posts

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

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

תודה !!

קישור לתוכן
שתף באתרים אחרים

אז אם אני בונה אותה, אז האלגוריתם זה למעשה להריץ את 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?

קישור לתוכן
שתף באתרים אחרים

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

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

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

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

:s05:

קישור לתוכן
שתף באתרים אחרים

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

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

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...