|
As just stated, if its not homework and you have working code then post it and someone here will explain the use of the return keyword for you.
I still call this out as homework.
|
|
|
|
|
Of course this is homework, no company is going to pay for string reversals.
Maybe class gnirts could help, but sadly it has been postponed till the next
major upgrade of the .NET Framework.
Luc Pattyn [Forum Guidelines] [My Articles]
this months tips:
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use PRE tags to preserve formatting when showing multi-line code snippets
|
|
|
|
|
|
hmmmm... does that sound like a homework question?
you could use a stack to do this:
public void Main()
{
string foo = "i will do my homework on my own";
string blah = reverseString(foo);
Console.WriteLine(foo);
Console.WriteLine(blah);
}
public void reverseString(string Text)
{
System.Collections.Stack st = new Stack();
foreach (char c in Text)
{
st.Push(c);
}
ArrayList l = new ArrayList();
while (st.Count > 0)
{
l.Add(st.Pop());
}
char[] s = l.ToArray(typeof(char)) as char[];
string RetVal = new string(s);
return RetVal;
}
but if you use one of the other 999999999 possibilities to do it it'll be more efficient
|
|
|
|
|
ok this is my method, the loop is not functioning, but i cant see y???
public string Reverse(string WhatToReverse)
{
int lengthOfArray = WhatToReverse.Length;
//char array
char[] myArray = new char[lengthOfArray];
for (int i = lengthOfArray; i < 0; i--)
{
myArray[i] = WhatToReverse[i];
Console.Write(myArray[i]);
}
return ;//still to complete, but the loop dont work
}
Cheers
|
|
|
|
|
hustler2005 wrote: for (int i = lengthOfArray; i < 0; i--)
I is not less than 0 at the start.
|
|
|
|
|
I prefer the following...
public void Main()
{
string str = "I will do my homework on my own";
IntPtr strPtr = Marshal.StringToHGlobalUni(str);
IntPtr resPtr = ReverseString(strPtr);
string res = Marshal.PtrToStringUni(result);
Marshal.FreeHGlobal(strPtr);
Marshal.FreeHGlobal(resPtr);
Console.WriteLine(str);
Console.WriteLine(res);
}
public IntPtr ReverseString(IntPtr strPtr)
{
string str = Marshal.PtrToStringUni(strPtr);
char[] strAsCharArray = new char[str.Length];
for (int i = 0; i < str.Length; ++i)
{
strAsCharArray[i] = str[0];
str = str.Substring(1);
}
StringBuilder sb = new StringBuilder(strAsCharArray.Length);
string res = string.Empty;
for (int i = 0; i < str.Length; i += 2)
{
string next = string.Empty;
for (int j = 1; j >= 0; --j)
{
if (i + j == str.Length)
continue;
char c = strAsCharArray[i + j];
next.Insert(0, c.ToString());
res.Insert(1 - j, c.ToString());
}
sb.Append(next);
}
str = sb.ToString();
IntPtr rval = Marshal.StringToHGlobalUni(res);
return rval;
}
This is O(n), which is as fast as this operation can be done given how strings are implemented in the system (with a double-linked-list, it can be O(1)). Hope this helps.
Jeff
|
|
|
|
|
Since you already optimized the code, more in particular by unrolling the for loop,
it is actually more like O(n/2) which is quite good.
Luc Pattyn [Forum Guidelines] [My Articles]
this months tips:
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use PRE tags to preserve formatting when showing multi-line code snippets
|
|
|
|
|
Thanks all sorted, this is what i used.......
public string Reverse(string WhatToReverse)
{
string str2 = string.Empty;
StringBuilder sb = new StringBuilder();
//char array
char[] myArray = WhatToReverse.ToCharArray();
for(int i = WhatToReverse.Length-1; i >=0; i--)
{
sb.Append(myArray[i].ToString());
}
str2 = sb.ToString();
return str2;
}
Cheers
|
|
|
|
|
Good work! Post something like this and ask how to make it better, and we will honestly try to help (instead of the crappy roundabout ways we proposed to solve the problem earlier). The way I would implement this problem is as follows...
public string ReverseString(string str) {
StringBuilder result = new StringBuilder();
for (int i = str.Length - 1; i >= 0; --i)
result.Append(str[i]);
return result.ToString();
}
Like I said, show that you have put even a little effort into trying to find the answer by yourself, and we will try to give you the help you need to get it right, but don't expect us to give you the answer from scratch.
Jeff
|
|
|
|
|
Just one adjustment; specify the capacity when you create the StringBuilder:
StringBuilder result = new StringBuilder(str.Length);
This will allocate a string with the exact right size. This has two advantages:
1. The StringBuilder never has to increase the capacity (which is done by allocating a new string with double the size, and copy the data from the previous string to it).
2. The string returned by the ToString method doesn't have any extra unused characters beyond the actual string. If you don't specify the length, the string may use up to twice as much memory as it needs to.
Experience is the sum of all the mistakes you have done.
|
|
|
|
|
Wow... I can't beleive I missed that!
Jeff
|
|
|
|
|
Have you considered using Array.Reverse method?
string original = "original";
char[] reverseString = original.ToCharArray();
Array.Reverse(reverseString);
original = string.Empty;
for (int i = 0; i < reverseString.Length; i++)
original += reverseString[i];
I will use Google before asking dumb questions
|
|
|
|
|
summing up to new string(Array.Reverse(original.ToCharArray())
or even better a sequence of original.ToCharArray() , Array.Reverse() and new string(char[])
-- modified at 15:58 Thursday 22nd November, 2007
Luc Pattyn [Forum Guidelines] [My Articles]
this months tips:
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use PRE tags to preserve formatting when showing multi-line code snippets
|
|
|
|
|
No, you can't do like that. The Array.Reverse method doesn't return the reversed array, it reverses the array in place.
Experience is the sum of all the mistakes you have done.
|
|
|
|
|
You're right of course. So I'd better turn it into a small method...
Luc Pattyn [Forum Guidelines] [My Articles]
this months tips:
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use PRE tags to preserve formatting when showing multi-line code snippets
|
|
|
|
|
Of course, as a quick and dirty hack you could always use a recursive method. I'm not saying you should, but you could. I've seen this done in so many homework assignments and coursework samples.
|
|
|
|
|
The recursive method is pretty neat, actually. Who can resist a one-liner?
Not very efficient, though.
public string Reverse(string value) { return value.Length > 1 ? Reverse(value.Substring(1)) + value.Substring(0, 1) : value; }
Experience is the sum of all the mistakes you have done.
|
|
|
|
|
There you go then. The last step is to turn this into a delegate and you're laughing.
|
|
|
|
|
Well, delegates can be used in many ways...
public string Reverse(string value) {
string result = string.Empty;
new List<char>(value.ToCharArray()).ForEach(delegate(char c) { result = c.ToString() + result; });
return result;
}
Experience is the sum of all the mistakes you have done.
|
|
|
|
|
i have a static custom class that keeps track of app settings by reading a db, i periodically retrieve a new list, and want to compare that to the static class (both are the same type) how would i go about doing that, would CompareTo() work for this?
|
|
|
|
|
Have you considered creating a custom Equals or CompareTo method?
If not you should have. The Equals method from object class compares instances not the data within the objects.
I will use Google before asking dumb questions
|
|
|
|
|
hi.. regarding to this link in your website.. http://www.codeproject.com/csharp/charting.asp
i downloaded the source file.. and when i do it in my laptop.. the textbox with value come out... but when i click on the graph button... the page just disappear.. waht is wrong here?
|
|
|
|
|
I think it would be a better idea to ask the author of the article, don't you think?
I will use Google before asking dumb questions
|
|
|
|
|
Did you remember to fill your laptop screen with enough ink?
"On one of my cards it said I had to find temperatures lower than -8. The numbers I uncovered were -6 and -7 so I thought I had won, and so did the woman in the shop. But when she scanned the card the machine said I hadn't.
"I phoned Camelot and they fobbed me off with some story that -6 is higher - not lower - than -8 but I'm not having it."
-Tina Farrell, a 23 year old thicky from Levenshulme, Manchester.
|
|
|
|