Что нового

[Массивы] преобразовать строку в массив

Sanlak

Новичок
Сообщения
5
Репутация
0
Необходимо преобразовать строку в массив. Вот что у меня получилось:
Код:
$s=232
$l=StringLen($s)
For $u = 1 to $l 
$t[$u] = StringMid($s,$u, 1)
Next


Что в этом коде не так? Помогите написать "правильный" код.
 

Z_Lenar

Продвинутый
Сообщения
209
Репутация
52
Код:
#include <Array.au3>
Local $t[1];Объявление массива с одним "пустым" элементом. Без этого функции _Array... не сработают
$s=232
$l=StringLen($s)
For $u = 1 to $l
	_ArrayAdd($t,StringMid($s,$u, 1))
Next
_ArrayDelete($t, 0) ; Удаление первого "пустого" символа
_ArrayDisplay($t)
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
Код:
#include <Array.au3>
$s = 232
$t = StringSplit($s, '', 2)
_ArrayDisplay($t, 'Array')
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Код:
#include<Array.au3>
$sString="Hello123456" ;Объявление строки
$Len=StringLen($sString) ;Вычисление элементов в строке
Global $Array[$Len] ;Объявление глобально массива размер которого равен кол-ву эл-ов в строке
#cs
Dim $aString[5] ;В массиве $aString будет 4 ячейки, отсчет идет уже не от 1, а от 0
#ce
For $i=0 To $Len-1 ;Цикл от 0(первая ячейка в массиве) до последней-1(последняя ячейка)
	$Array[$i]=StringMid($sString,$i+1,1)
Next
_ArrayDisplay($Array)

:smile:
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Код:
$Str="232"
$aStr = StringSplit($Str, "")
For $i = 1 To $aStr[0]
   MsgBox(0, "Элемент массива", $aStr[$i])
Next
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
До кучи. :smile:
Код:
#include <Array.au3>

$sStr = 'Test string' & @CRLF & 'Next string'
$aArr = StringRegExp($sStr, '(?s).', 3)
_ArrayDisplay($aArr)
 

ildar

Осваивающий
Сообщения
252
Репутация
29
madmasles
Красивое решение :IL_AutoIt_1:
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
ildar [?]
Красивое решение
Но медленное. Самая быстрая функция - StringSplit, можешь проверить. Если StringSplit выполняет то что ты хочешь, то делай с помощью неё не задумываясь.

Код:
#include <Array.au3>

$sStr = 'Test string' & @CRLF & 'Next string'

$timer1 = TimerInit()
For $i = 1 To 1000
	$aArr = StringRegExp($sStr, '(?s).', 3)
Next
$timer1 = Round(TimerDiff($timer1), 2)

$timer2 = TimerInit()
For $i = 1 To 1000
	$aArr = StringSplit($sStr, '', 2)
Next
$timer2 = Round(TimerDiff($timer2), 2)

MsgBox(0, "Время выполнения", '$timer1 = ' & $timer1 & ' мсек' & @LF & '$timer2 = ' & $timer2)
; _ArrayDisplay($aArr)
 

ildar

Осваивающий
Сообщения
252
Репутация
29
AZJIO
По скорости даже не спорю. Как-то попробовал и мне понравилось работать с регулярными выражениями.
 
Верх