Member 12789975 Ответов: 3

Как перевернуть текст


Я работаю в своем проекте, и одна из его функций заключается в том, чтобы перевернуть только текст (число должно оставаться таким же). Например текст Это тестовый файл становится
Элиф цет а Си сихт. Еще один пример, который содержит цифры США 123 ОАЭ должна стать ТУАЛЕТНАЯ 123 АСУ
Я пишу следующую программу, но результат не корректен, особенно для строк, содержащих цифры (проблема возникает, когда английский текст в одной строке разделен цифрами). Например, я получил США 123 ОАЭ вместо правильного результата ТУАЛЕТНАЯ 123 АСУ. Также приговор Кувейт Ирак 784 Бахрейн должно быть ниархаб 784 Кари тиавук но у меня есть оригинал.
Так что любая помощь или предложения
FileName = "C:\Users\PC\Desktop\test.txt"
        Dim AllTextFile As String = File.ReadAllText(FileName)
        Dim objReader As New System.IO.StreamReader(FileName)
        Dim seperatedWordsArray As String()
        Dim allTextLines As String = ""
        Dim tempTextLine As String = ""
        Dim englishSentence As String = ""
        Dim someSentences As New List(Of String)
        Do While objReader.Peek() <> -1
            TextLine = objReader.ReadLine()
            tempTextLine = TextLine
            englishSentence = ""
            seperatedWordsArray = Regex.Split(TextLine, " "c)
            For Each word As String In seperatedWordsArray
                If (Regex.IsMatch(word, "^[a-zA-Z,.:]*$")) Then
                    englishSentence = englishSentence & word & " "
                End If
            Next

            englishSentence = englishSentence.TrimEnd(" ") 'Remove the last space that added by the previous sentence englishSentence = englishSentence & word & " "
            If (englishSentence.Length > 0) Then
                tempTextLine = tempTextLine.Replace(englishSentence, StrReverse(englishSentence))
            End If
            allTextLines = allTextLines & tempTextLine & vbNewLine
        Loop
        TextBox2.Text = allTextLines


Я попробовал свою программу, используя следующий текст:
Это тестовый файл
США 123 ОАЭ
Трамп-Тауэр Нью-Йорк 667
123 abcdef ABCDEF
Кувейт Ирак 784 Бахрейн
Предложение - это группа слов, которая выражает утверждение, вопрос, команду или восклицание
111 Предложение 454 Различные Типы 777:
Утверждение, Тип Вопроса, Тип Команды, Тип Восклицания


Что я уже пробовал:

Я написал небольшую программу но результат оказался неправильным

Richard MacCutchan

"но результат неправильный"

И мы должны догадаться, что это значит.

[no name]

Что вы обнаружили в своем коде, когда прошли через него с помощью отладчика?

3 Ответов

Рейтинг:
0

Patrice T

Когда люди находят для вас жучки, это очень хорошо, но так вы многому не научитесь. С помощью отладчика вы узнаете гораздо больше, и ваши навыки улучшатся.

Вы должны научиться использовать отладчик как можно скорее. Вместо того чтобы гадать, что делает ваш код, пришло время увидеть, как он выполняется, и убедиться, что он делает то, что вы ожидаете, проверяя переменные по мере выполнения вашего кода.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.

[Обновление]
Я думаю, что было бы проще начать с реверса всей строки, использовать регулярное выражение для поиска чисел,а затем заменить их обратными.


Рейтинг:
0

OriginalGriff

Начните с того, что сделайте свою жизнь проще: вместо того, чтобы использовать файл.ReadAllText и разработка строк самостоятельно, используйте файл.Прочтите все строки, и вы получите файл, разбитый для вас.

Затем напишите метод, который принимает Строковый параметр и возвращает строку. Это ваш метод "обратного хода линии".

Начните с того, что посмотрите на входную строку с конца, а не с начала.
Если символ представляет собой букву, добавьте ее в вывод. Если это число, найдите первую цифру в последовательности и скопируйте ее на выход в текущем виде. Затем установите цикл для работы с символом до начала числа.
Так
USA 123 UAE накапливается в выводе как

E
EA
EAU
EAU<space>
EAU 123
EAU 123<space>
EAU 123 A
EAU 123 AS
EAU 123 ASU

Это нетрудно сделать, если вы подумаете об этом на мгновение (подумайте об использовании цикла For для отсчета индекса символов и доступа к входной строке в виде массива символов), но это ваше домашнее задание, поэтому я не буду кодировать его для вас!

(Если вы знакомы с классом StringBuilder, это был бы отличный тип для использования при создании выходных данных. Если нет, то подойдет Струна.)


Рейтинг:
0

Peter Leow

Сначала оставьте кодирование в стороне. Вам нужен план, все должно начинаться с плана, почти. Разработайте правильный метод решения вашей проблемы, или так называемый "алгоритм". Запишите его с помощью бумаги и ручки. Опишите подход шаг за шагом, используя естественный язык. Разберитесь в логике, повторяйте до тех пор, пока не поймете. Как только это будет сделано. Вы получаете так называемый псевдокод, описывающий алгоритм решения вашей задачи. Теперь вы можете сесть и преобразовать этот псевдокод в компьютерную программу, используя любой компьютерный язык программирования.
Для вашего вопроса псевдокод может выглядеть следующим образом:

Step 1  Reverse the (original) string character by character.
Step 2  Scan through the (reversed) string character by character,
    2.1  When a digit is found, reversed it.

Alternatively, you may start with step 2 on the original string followed by step 1.

Обратите внимание, что две операции, связанные с реверсированием строки, аналогичны, они являются кандидатами на повторное использование. Обратите внимание на это в своем коде.
Чтобы улучшить свой код, спросите себя, нужно ли менять одну цифру?
Я не буду предоставлять код, но вы можете поискать в google соответствующие методы на выбранном вами языке программирования, которые могут выполнять следующие операции:
1. Шаблон (регулярное выражение).
2. Манипуляции со строками.
3. Циклы.
Наслаждайтесь обучением...