מחרוזות C++

brokenn

New member
מחרוזות C++

כתבו פונקציה המקבלת כתובות של שתי מחרוזות s ו-t , ומספר שלם from.
כותרת הפונקציה : char * Ins(char *s, char *t, unsigned from)
הפונקציה צריכה לצור מחרוזת חדשה הבנויה מהתווים של s, אך החל מהמקום from משולבים בה התווים של המחרוזת t, ראו דוגמאות:

עבור: " s1="I fail!" , s2="cannot, והקריאה Ins(s1, s2, 2),, תוחזר המחרוזת "I cannot fail!"
(הפונקציה מחזירה כתובת)

אפשר הדרכה איך להתחיל את התרגיל?
 

KingUnique

New member
תגידי מה את לא מבינה בדיוק

התרגיל הוא דיי stright forward, לשלב מחרוזת אחת בתוף צירוזת שניה
 

brokenn

New member
אני לא מבינה איך לשלב

מחרוזת בתוך מחרוזת החל ממקום מסויים
ולהחזיר את הכתובת של המחרוזת החדשה.
חשבתי ליצור מערך מחרוזות חדש כך:

char * Ins(char *s, char *t, unsigned from){
char *r;
if (from>strlen(s)){
printf("Illegal from.\n");
_getch();
return NULL;
}
r = (char *)malloc((strlen(s) + strlen(t) +1)*sizeof(char));
if (!r)Get_Lost("No Memo");


ובתוך r להציב את המחרוזת החדשה,אך אני לא מבינה איך לעשות את זה:(
 

ברנדל

New member
תשובה

#include "stdafx.h"
#include <string>

char * Ins(char *s, char *t, unsigned from)
{
int nFirstSize = strlen(s);
int nSecondSize = strlen(t);

int nTotalSize = nFirstSize + nSecondSize;
char* ret = new char[nTotalSize];

for (int i = 0; i != from; i++)
{
ret = s;
}

for (int i = 0; i != nSecondSize; i++)
{
ret[from + i] = t;
}

for (int i = 0; i != nFirstSize - from; i++)
{
ret[from + nSecondSize + i] = s[from + i];
}

ret[nTotalSize] = 0;

return ret;
}

int main( int argc, const char* argv[] )
{
char * result = Ins("I fail", "can not ", 2);

//delete []result;
return 0;
}
 

brokenn

New member
האמת

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

שאלה קטנה לגבי השורה ret[nTotalSize] = 0;
למה לא יכולתי ישר לרשום
return ret;
מבלי השורה הקודמת?

ו..תודה רבה רבה!!!:):):)
 

ברנדל

New member
תשובה

כי ב c/c++ מחרוזת חייבת להסתיים ב 0.
ככה הקומפיילר יודע שהמחרוזת הסתיימה ולא משייך אליה תווים נוספים אחרי ה 0 שסתם רשומים בהמשך הזיכרון.
 
למעלה