Реверс строки с сохранением позиций слов и спец. символов
Нужно сделать реверс с сохранением слов и символов ( , ,, !)
static void Main(string[] args) {
// Заданная строка
strint temp = "ffsd!f jgh1!ff"
// Нужно получить
result = "fdsf!f ff1h!gj"
}
Мой результат:
public class Anagram {
private string someText = default;
public Anagram() {
someText = "1234 5!678";
}
private string ReverseWord(string someString) {
int index = 0;
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.Length = someString.Length;
if (String.IsNullOrEmpty(someString)) {
throw new ArgumentNullException(nameof(someString));
}
else {
for (int i = someString.Length - 1; i >= 0; i--) {
if (Char.IsLetterOrDigit(someString[i])) {
stringBuilder.Insert(index, someString[i]);
}
else {
stringBuilder.Insert(i, someString[i]);
}
index++;
}
}
string result = stringBuilder.ToString();
return result;
}
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
Вот достаточно простое решение "в лоб".
static void Main(string[] args)
{
string text = "ffsd!f jgh1!ff";
string result = ReverseText(text);
Console.WriteLine(result);
}
static string ReverseText(string text)
{
string[] words = text.Split(' ');
for (int i = 0; i < words.Length; i++)
{
if (words[i].Length > 1)
{
words[i] = ReverseWord(words[i]);
}
}
return string.Join(" ", words);
}
static string ReverseWord(string word)
{
char[] chars = word.ToCharArray();
int j = word.Length - 1;
for (int i = 0; i < word.Length; i++)
{
if (char.IsLetterOrDigit(word[i]))
{
while (!char.IsLetterOrDigit(word[j]))
{
j--;
}
chars[j] = word[i];
j--;
}
}
return new string(chars);
}
Не стесняйтесь разбивать свое решение на методы, тогда не придется забивать голову всем сразу.
fdsf!f ff1h!gj