Как преобразовать 23456 в строку, и она должна отображаться как «Два, три, четыре, пять, шесть»?

Мне нужна помощь в преобразовании любого заданного числа, например «0123456789», присутствующего в TextBox, чтобы преобразовать его в строку типа «Zero One Two Three Four Five Six Seven Eight Nine» и распечатать в VB.Net.

В чем разница между методом "==" и equals()
В чем разница между методом "==" и equals()
Это один из наиболее часто задаваемых вопросов новичкам на собеседовании. Давайте обсудим его на примере.
Замена символа по определенному индексу в JavaScript
Замена символа по определенному индексу в JavaScript
В JavaScript существует несколько способов заменить символ в строке по определенному индексу.
2
2
83
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Почему бы не сделать функцию, которая читает до конца и для каждого целого числа не выполняет преобразование с таблицей как 1 -> One; 2 -> Два и т.д.?

как

Dim something as somewhat control that can carry text
Dim converted as other somewhat control that also can carry text

for each char in something.text
if char = ("1") then
converted.text = converted.text & ("one")
elseif char = ("2")
converted.text = converted.text & ("two")
elseif
...

извините за мой плохой английский, надеюсь, вы видите мою идею с какой-то быстрой, грязной и беспорядочной идеей из ниоткуда от моей задницы

Поместите имена чисел в массив, затем используйте результат Integer.Parse(c.ToString()) (или даже Cint() здесь) в цикле for each, чтобы выбрать имя из массива. StringBuider лучше конкатенации строк. Или LINQ в одну строку.

Jimi 11.01.2019 10:43

@Jimi Вау, мне нравится твоя идея

preciousbetine 11.01.2019 10:49

Как предложил Джими, вы можете сделать что-то вроде этого

Dim wordsarray As String() = {"Zero", "One", "Two", " Three" , "Four", "Five", "Six", "Seven", "Eight", "Nine"}
Dim result As String = ""
For each c As Char In TextBox1.Text
  result &= wordsarray(Integer.Parse(c)) & " "
Next
'The string is now stored in the result variable and you can do something like this
Msgbox(result)

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

@Jimi Спасибо, я отредактировал ответ, можно ли его еще отредактировать?

preciousbetine 11.01.2019 12:43

Да! Dim numarray As Char() и т.п. не нужен. Как описано ранее, строка уже является массивом Char: вы можете просто иметь For each c As Char In Textbox1.Text. Другая линия идет. Если вы считаете, что его нужно обрезать, добавьте TextBox1.Text.Trim().

Jimi 11.01.2019 12:46

мое решение

Function NumberToText1(ByVal n As Integer) As String ' numeri da 0 a 9
    Dim arr() As String = {"Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven",
"Eight", "Nine"}
    Return arr(n) & " "
End Function

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim w As String = ""
    For Each s As String In TextBox1.Text
        w += NumberToText1(CInt(s))
    Next
    MessageBox.Show(w)
End Sub
For Each s As String In TextBox1.Text Я не думаю, что это правильно, потому что в текстовом поле только одна строка.
preciousbetine 11.01.2019 12:45
Ответ принят как подходящий

0,02 доллара США

Private Function NumberDigitsToText(Num As Integer) As String
    Dim rv As String = ""
    Dim words() As String = {"Zero ", "One ", "Two ", "Three ", "Four ", "Five ", "Six ", "Seven ", "Eight ", "Nine "}

    rv = String.Join("", (From c In Num.ToString
                          Select words(Integer.Parse(c))))
    Return rv
End Function

dbasnett спасибо за вас Решение Это сработало, мне также нужен тот же код для vb6

Sunnysnaffi 14.01.2019 08:05

Другие вопросы по теме