Member 12741660 Ответов: 4

Как реверсировать строку с помощью символьного массива в VB.NET, условие состоит в том, что обратный массив хранится в отдельном символьном массиве. Нет использования reverse и других функций .NET.


Я много пробовал, но не получаю правильного перевернутого массива во втором массиве.

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

Module Module1

    Sub Main()
        Dim str As String
        Dim chara() As Char
        Dim charaR() As Char
        Dim len As Integer
        Dim j As Integer
        str = "Hello World"
        chara = CType(str, Char())
        len = str.Length
        j = len
        j = j - 1
        charaR = chara
        Console.WriteLine(str)
        Console.WriteLine("String Length: " & str.Length)
        Console.WriteLine()
        Console.WriteLine("Normal array:")
        For i = 0 To len - 1
            Console.Write(chara(i))
        Next
        Console.WriteLine()
        For i = 0 To len - 1
            Console.WriteLine(chara(j))
            charaR(i) = chara(j)
            'Console.Write(charaR(i))
            j -= 1
        Next
        Console.WriteLine()
        For i = 0 To len - 1
            Console.Write(charaR(i))
        Next
        Console.WriteLine()
        Console.ReadLine()
    End Sub

End Module

4 Ответов

Рейтинг:
2

Patrice T

Цитата:
Я знаю основы. Я работаю и учусь в этой области уже в общей сложности 10 лет.
Что вы сделали за эти 10 лет ? эта проблема-уровень первого года !

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

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

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

Совет: возьмите лист бумаги и попробуйте сделать это вручную, ваша программа должна использовать ту же процедуру.


Member 12800385

Я был чертовски занят другими проектами.

Рейтинг:
2

Member 12800385

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

Module Module1

    Sub Main()
        Dim str As String
        Dim chara() As Char
        Dim charaR() As  Char
        Dim len As Integer
        Dim j As Integer
        str = "Hello World"
        chara = CType(str, Char())
        len = str.Length
        j = len
        j = j - 1
        charaR = CType(str, Char())
        Console.WriteLine(str)
        Console.WriteLine("String Length: " & str.Length)
        Console.WriteLine()
        Console.WriteLine("Normal array:")
        For i = 0 To len - 1
            Console.Write(chara(i))
        Next
        Console.WriteLine()
        For i = 0 To len - 1
            Console.WriteLine(chara(j))
            charaR(i) = chara(j)
            'Console.Write(charaR(i))
            j -= 1
        Next
        Console.WriteLine()
        For i = 0 To len - 1
            Console.Write(charaR(i))
        Next
        Console.WriteLine()
        Console.ReadLine()
    End Sub

End Module


Рейтинг:
0

CPallini

Похоже, вы путаетесь со ссылками. Персонажи должны быть скопированный от исходной строки к первому массиву (chara), а затем скопировал с последнего (перевернув их) на второй (charaR).


Рейтинг:
0

OriginalGriff

Это домашнее задание, так что никакого кода!
Самый простой способ-создать массив символов той же длины, что и оригинал, а затем выполнить цикл через исходную строку (или массив) с помощью цикла For, идущего от (Length - 1) вниз к нулю. Перед запуском цикла добавьте переменную "выходной индекс", которая начинается с нуля. Внутри цикла скопируйте символ из оригинала в вывод и увеличьте выходной индекс.
Сделано.


Member 12741660

Я сделал это в Кодексе.

OriginalGriff

Нет, это не так.
Вы копируете из того же массива, что и копируете, из-за этой строки:

чарар = Чара

Это копирует ссылку из одной переменной в другую, так что они оба "указывают" на одни и те же данные в памяти.
Это как автомобили: у вас есть "ваша машина", а у вашей новой подруги - "ее машина". Она переезжает к тебе, и ты решаешь, что можно пойти и продать одну. Теперь и "ваша машина", и "ее машина" относятся к одному и тому же транспортному средству - если вы разбиваете "свою машину", вы также списываете "ее машину"!

Member 12741660

Чара и чарар объявляются отдельно.
у Чары есть оригинальная струна.
предполагается, что чарар принимает данные чары в обратном порядке.
Видишь ?
Сделайте одно-запустите код.
На самом деле он делает половину задачи.
Мир становится таким же прекрасным, как dlroW.
Но не привет.
Просто запустите этот код, как только вы поймете лучше.

OriginalGriff

Переменные объявляются отдельно, но эта строка кода означает, что они имеют общее значение - и, следовательно, ссылку на одну и ту же область памяти.
Вы выделяете только одну область памяти-Преобразуя строку "Hello world" в массив символов - и используете одну и ту же память для обеих переменных.
Попробуйте: добавьте эти две строки после задания:

чарар = Чара
Чара(0) = 'X'
charaR(0) = 'Y'

затем посмотрите на содержимое" обоих " массивов.
Надеюсь, вы поймете, что я имею в виду.