ABA


"עזרה בסי++ - מחרוזת כפוינטר"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #7694 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 7694
Zukini

   13:23   03.01.04   
אל הפורום  
  עזרה בסי++ - מחרוזת כפוינטר  
 
   אם אני קולט מחרוזת כפוינטר
באיזה פעולת קלט אני צריך להשתמש?


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  לא ברור לי למה אתה מתכוון? dryice 03.01.04 14:05 1
     יש הרבה פקודות, Quant86 03.01.04 15:03 3
  אז ככה Zukini 03.01.04 14:59 2
     תעבור להשתמש בSCANF וזהו...... Quant86 03.01.04 15:04 4
     מקפיץ Zukini 05.01.04 19:08 5

       
dryice

   14:05   03.01.04   
אל הפורום  
  1. לא ברור לי למה אתה מתכוון?  
בתגובה להודעה מספר 0
 
   קלט מחרוזת בצורה הפשוטה ביותר מתבצע עם cin כמו בכל קלט אחר.

DRYICE


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Quant86

   15:03   03.01.04   
אל הפורום  
  3. יש הרבה פקודות,  
בתגובה להודעה מספר 1
 
   אבל דבר ראשון שאתה צריך לעשות זה להקצות זכרון עבור הפוינטר שלך, אלא אם כן השתמשת בהקצאה סטטית........
למשל ככה:
char *str = new char;
gets(str)
אולם פונקציה זאת אינה בטוחה, כיוון שהיא עלולה להביאך ל
Buffer overflow
כלומר המשתמש מקליד יותר תווים ממה שהוקצא, אם ברצונך לתכנת נכון אתה צריך להשתמש בפונקציה
fgets(str,10,STDIN)
כלומר קריאה יענו מקובץ אבל בעצם מהקלט הסטנדרטי שהוא STDIN - המקלדת....

יש עוד את האפשרות להשתמש ב
scanf("%10s",str)
כאן אתה בעצם אומר שאתה לקרוא רק 10 תווים, ופונקציה זו היא כן בטוחה.....

נראה לי שגם יש אפשרות להשתמש באחת מההרחבות של CIN עבור קליטה בטוחה (כלומר להגביל את גודל המחרוזת המוצבת בבאפר שלך.....) אבל אני לא זוכר :(

בהצלחה !


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Zukini

   14:59   03.01.04   
אל הפורום  
  2. אז ככה  
בתגובה להודעה מספר 0
 
   זו הבעיה הגדולה יותר, כנראה שזה לא היה הcin.
מה לא בסדר בתוכנית הבאה?
היא אמורה לקלוט מחרוזת באורך מוגדר ע"י המשתמש ולהחזיר מחרוזת
zipped
או
unzipped
בהתאם

למשל, אם היא מקבלת
aaabbc
היא תחזיר
3a2b1c
ואם היא תקבל
2d1g4a
היא תחזיר
ddgaaaa

הקימפול מצליח והתוכנית עובדת אבל לא מדפיסה כלום
ואם אני חוזר לעמוד של האאוטפוט רשום לי
null pointer assignment

מישהו יודע במקרה מה ואיפה הבעיה? זה חשוב לאללה
אני צריך להגיש את זה ביום שלישי

התוכנית:


#include <iostream.h>
#include <conio.h>
#include <stdio.h>
void ZipStr (char *Str1, char *Str2);
int FindUnZipLen (char *Str1);
void UnZipStr (char *Str1, char *Str2);
int FindZipLen (char *Str1);
void main ()
{
clrscr();
char *Str1,*Str2,*p1,*p2;
int i,length;
cout<<"Enter your string's length"<<'\n';
cin>>length;
Str1=new char ; // adding NULL
cout<<"Enter your string."<<'\n';
cout<<"The program will analyze whether you want to Zip or UnZip"<<'\n';
for (i=0; i<length; i++)
cin>>*(Str1+i);
*(Str1+length)='\0';
p1=Str1; p2=Str2; //Saving the original pointing of Str1,Str2
if ((*Str1<='9') && (*Str1>'0'))
{
Str2=new char ; //giving Str2 its exact length
Str1=p1;
UnZipStr(Str1,Str2);
}
else
{
Str2=new char ; //giving Str2 its exact length
Str1=p1;
ZipStr(Str1,Str2);
}
Str2=p2;
while (*Str2!='\0')
{
cout<<*Str2;
Str2++;
}
delete Str1;
delete Str2;
getch();
}
void ZipStr (char *Str1, char *Str2)
{
char chr;
int mone;
while (*Str1!='\0')
{
mone=0;
chr=*Str1;
while (*Str1==chr)
{
Str1++;
mone++;
}
*Str2=mone+48;
Str2++;
*Str2=chr;
Str2++;
}
*Str2='\0';
}
int FindUnZipLen (char *Str1)
{
int mone=0;
while (*Str1!='\0')
{
if (*Str1!=*(Str1++))
mone+=2;
Str1++;
}
return(mone+1); //one for NULL
}
void UnZipStr (char *Str1, char *Str2)
{
int i;
while (*Str1!='\0')
{
for (i=0; i<(*Str1-48); i++)
*(Str2+i)=*(Str1++);
Str2+=*Str1-48;
Str1+=2;
}
*Str2='\0';
}
int FindZipLen (char *Str1)
{
int mone=0;
while (*Str1!='\0')
{
mone+=(*Str1-48)+1; //+1 for the char
Str1+=2;
}
return(mone+1); //+1 for NULL
}


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Quant86

   15:04   03.01.04   
אל הפורום  
  4. תעבור להשתמש בSCANF וזהו......  
בתגובה להודעה מספר 2
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Zukini

   19:08   05.01.04   
אל הפורום  
  5. מקפיץ  
בתגובה להודעה מספר 2
 
   זה עדיין לא עובד ואני לא מוצא את הבעיה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net