iv работал над этим алгоритмом в C#, чтобы взять заданную строку, удалить любые пробелы, а затем вернуть результат. Да, есть миллион и один способ сделать это , но я хотел сделать свой собственный алгоритм независимым от стандартной библиотеки классов. Кроме того, я знаю, что есть миллион и один способ использовать подобный алгоритм по-другому, но, просто со мной, пожалуйста, пожалуйста.Как я могу исправить этот алгоритм управления строкой?
Алгоритм работает отлично, если первый символ в данной строке НЕ является пробелом. Но если в качестве первого символа есть пробел, возвращаемая строка содержит правильное количество символов, но символы являются «пустыми». По крайней мере, когда печатается на консоль. Я смотрел на этот код часами, пытаясь это, пытаясь, но, для жизни меня, я не могу понять, что вызывает проблему. Im испугался до смерти , чтобы даже опубликовать это, поскольку кто-то может придумать простое исправление, которое заставляет меня выглядеть отсталым , а затем iv татуировать все время, но, посмотрев и посмотрев, здесь. Мне нужна помощь! Возьмите gander в коде.
public static string RemoveSpaces(string arg)
{
char[] temp = arg.ToCharArray();
int newLength = 0;
//Calculate number of characters that arent spaces.
for (int e = 0; e < temp.Length; e++)
{
if (temp[e] != ' ')//If not a space,
{
newLength++;//then increment number of characters.
}
}
//Now use that number as size in new array
char[] newString = new char[newLength];
//Copy characters that arent spaces to the new char array.
for (uint e = 0, e2 = 0; e < temp.Length; e++, e2++)
{
//NOTE: e2 (and e) is a uint because it can end up negative for a
//short period.
if (temp[0] == ' ')//If the FIRST element is a space
{
e2--;//Then dont let e2 be "truely" incremented in next cycle.
continue;
//e (and e2) will now be incremented by the loop.
//but since we just decremented e2 it will be 1 behind e.
//So we wont be skipping an element in newString if
//we arent going to copy anything to that element.
//Same thing happens in the other if statement below.
//(Where the copying really happens)
}
if (temp[e] != ' ')//If element e is NOT a space,
{
newString[e2] = temp[e];//then copy that element to newString.
}
else//If element e IS a space
{
e2--;//Then dont let e2 be truely incremented in next cycle.
//Cycle is complete so no use for continue; here.
}
}
return new string(newString);//Done!
}
Чего вы хотите достичь? Вы хотите удалить лишние пробелы и внутри символов? –
Возможный дубликат [Нет записей, возвращаемых, когда значение параметра пропускается из функции] (http://stackoverflow.com/questions/9113086/no-records-return-when-the-value-being-pass-in- параметр-is-from-function) –