עבור לתוכן

בעיה בתרגיל מחרוזות C#

Featured Replies

פורסם

תתי מחרוזות הפוכות:

פתח ויישם בשלבים אלגוריתם הקולט מחרוזות עד לקליטת המחרוזתת the end כל מחרוזת מכילה תת מחרוזות המופרדות בתו 0 עבור כל מחרוזת יש לבנות מחרוזזת חדשה , כך שבכל תת מחרוזת שלה יופיעו התווים בסדר הפוך לסדר הופעתם בתת מחרוזת של המחרוזת המקורית ולהציג אותה כפלט למשל b0$%y0ggg0 תציג b0y%$0ggg0

 

class Program {
public static string nana(string mila)
{
int ziro = 0;
int ziro2 = mila.IndexOf("0");
string word = mila.Substring(0, ziro);
string word2 = word;
while (ziro2 != -1)
{
for (int i = ziro; i < word.Length - 1; i++)
{
word[i] = word2[i + word2.Length - 2 - i];
}
ziro = ziro2 + 1;
ziro2 = mila.IndexOf("0", ziro + 1);
word = mila.Substring(ziro, ziro2);
word2 = word;
}
}



static void Main(string[] args)
{
Console.WriteLine("klot mah");
string mila = Console.ReadLine();
while (mila == "the end")
{
Console.WriteLine("ha mahrozet hahafoha hi: {0}", nana(mila));
Console.WriteLine("klot mah");
mila = Console.ReadLine();
}

}
}
}

הבעיה פה זה שיש eror בקטע הזה:

 word[i] = word2[i + word2.Length - 2 - i];

ויש לי עוד שאלה :)

יש איזה תרגיל שהסתבכתי אייתו לגמרי :

כתוב אלגוריתם המקבל כקלט מחרוזת שאורכה לפחות 8 תתווים , ומציג כפלט את מספרר תתי המחרוזות הקיימות במחרוזת שאורכן 2-6 תווים ומקימות את התנאי של הפעולה מסעיף א' (מספר הAים שווה למספר הBים) לדוגמא עבור הקלט:abcbbaadaaabbb מספר תתי המחרוזת הוא 8.. ab,bbaa,aabb,aaabbb,cbbaa,cbbaad

תודה רבה מראש לכל העוזרים :):D

פורסם

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

השורה הזו:

string word = mila.Substring(0, ziro);

מוציאה תת-מחרוזת בגודל 0 מתוך mila, כלומר היא פשוט שקולה לדבר כזה:

string word = "";

השורה שציינת כבעייתית - מה היא אמורה לעשות? בחישוב של האינדקס את מוסיפה את i ואחר כך מחסירה אותו, ככה שבתכל'ס מה שיושב בתוך הסוגריים המרובעים הוא מספר קבוע (word2.Length - 2) שאינו תלוי ב-i.

חוץ מזה, לא כל כך ברור מה הדרישה של התרגיל.

פורסם
  • מחבר

הדוגמא לא יצאה כל כך טוב אל תתייחסו אליה..

הכוונה היא עבור הקלט :

abc0def0

יתקבל הפלט:

cba0fed0

המשתנה ziro הוא המקום הראשון במחרוזת הגדולה .. שישתנה בהמשך

המשתנה ziro2 הוא המקום הראשון בו מופיע המספר 0 , לאחר מכן אני כאילו גוזרת את התת מחרוזות בין הziro לziro2

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

ולאחר מכןן אני מחפשת את ה0 הבא בתור שהוא יוצר תת מחרוזת חדשה בין ה0 הראשון ל0 השני וכך הלאה

פורסם
  • מחבר

הערה שאני מקבלת הייא

Error 1 Property or indexer 'string.this[int]' cannot be assigned to -- it is read

פורסם
  • מחבר

אז אם אני צריכה לשנות את התת מחרוזת איך אני עושה את זה ?

פורסם

אפשר באמצעות StringBuilder.

באיזה פונקציות מותר לך להשתמש?

פורסם
  • מחבר

Indexof

substring

replace

insertremove

equals

compareto

אלה הפונקציות היחידת שמותר לי להשתממש ..

פורסם

הדוגמא לא יצאה כל כך טוב אל תתייחסו אליה..

הכוונה היא עבור הקלט :

abc0def0

יתקבל הפלט:

cba0fed0

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

מה שאני מבין זה שיש להציג בסדר הפוך רק את התת מחרוזות שמוגבלות בין שנים אפסים במחרוזת המקורית ואת השאר להשאיר בסדר המקורי דהיינו abc0fed0 כמו בדוגמא שרשמת למעלה b0$%y0ggg0 תציג b0y%$0ggg0 .

פורסם

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


using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication5
{
class Program {

public static String nana(String mila)
{
//variable declaration: tempStr is the new string to bulid into, zeroidx1 holds fire '0' char occurence
string tempStr = "";
int zeroIdx1 = mila.IndexOf('0');

//check if no zero or only one is present if so do nothing
if (mila.IndexOf('0') == -1 || mila.IndexOf('0', zeroIdx1 + 1) == -1)
return mila;
//copy first part till first zero in appreance inclusive the zero himself
else
tempStr = mila.Substring(0, zeroIdx1 + 1);

// variable to hold closing zero, zeroIdx1 is reseted
int zeroIdx2 = 0;
zeroIdx1 = 0;
// keep track of last 0 idx
int lastIdx = 0;

//main loop to reverse the order of substring between two zeros
while ((zeroIdx1 = mila.IndexOf('0',zeroIdx1)) != -1)
{
// initialized zeroIdx2 to hold second 0 index
zeroIdx2 = mila.IndexOf('0', zeroIdx1 + 1);

// if zeroidex1 isn't the closing 0
if (zeroIdx2 != -1)
// reverse the order of substring between two zeros
for (int i=zeroIdx2 - 1; i >= zeroIdx1; i--)
tempStr += mila[i];
//incerment to get the next 0 in string
lastIdx = zeroIdx1;
zeroIdx1++;
}

// copy trailing letters after last closing zero
if ((lastIdx + 1) != mila.Length)
tempStr += mila.Substring(lastIdx+1);

// return to calling function
return tempStr;
}

static void Main(string[] args)
{
Console.WriteLine("klot mila: (type \"the end\" to exit)");
String mila = Console.ReadLine();
while (mila != "the end")
{
Console.WriteLine("ha mahrozet hahafoha hi: {0}", nana(mila));
Console.WriteLine("klot mila");
mila = Console.ReadLine();
}

}

}
}

using System;

לדוגמא עבור הקלט:abcbbaadaaabbb מספר תתי המחרוזת הוא 8.. ab,bbaa,aabb,aaabbb,cbbaa,cbbaad

[/q][/q][/q][/q]

לא ברור לי מה נדרש בתרגיל.

פתרון נוסף ואחר לתרגיל הראשון הפעם לדוגמא השניה שהבאת - פתרון רקרוסי.


using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication5
{
class Program {


public static String recursivefucn(String str)
{

string tmpStr = "";
if (str.IndexOf('0') != -1)
{
for (int i = str.IndexOf('0') - 1; i >= 0; i--)
{
tmpStr += str[i];
}
tmpStr += "0";
}
else
for (int i = str.Length - 1; i >= 0; i--)
tmpStr += str[i];

if (tmpStr.Length == str.Length)
return tmpStr;

tmpStr += recursivefucn(str.Substring(str.IndexOf('0') + 1));

return tmpStr;

}


static void Main(string[] args)
{
Console.WriteLine("klot mila: (type \"the end\" to exit)");
String mila = Console.ReadLine();
while (mila != "the end")
{
Console.WriteLine("ha mahrozet hahafoha hi: {0}", recursivefucn(mila));
Console.WriteLine("klot mila");
mila = Console.ReadLine();
}

}

}
}
using System;

ארכיון

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

דיונים חדשים