Перейти к содержимому

Как строку чисел преобразовать в массив с

  • автор:

строка целых чисел в Си

Здравствуйте. Подскажите, как преобразовать строку вида:
char str[]=»12 34 56 78″;
в массив целых чисел:
int arr[n];
***
arr[0]=12
arr[1]=34
.

Длина строки неизвестна. Заранее спасибо.

anonymous
21.12.03 20:17:46 MSK

Re: строка целых чисел в Си

#include int* strstoi(char* str, int* nnum) < int* t = NULL; int rc, num, n = 1; while ((rc = sscanf(str, "%d", &num)) >0) < t = realloc(t, sizeof(int)*n); t[n++-1] = num; while (isdigit(*str)) str++; while (isspace(*str)) str++; >*nnum = n-1; return t; > int main()
Murr ★★
( 21.12.03 21:33:27 MSK )
Ответ на: Re: строка целых чисел в Си от Murr 21.12.03 21:33:27 MSK

Re: Re: строка целых чисел в Си

main()
<
char *b = «123 0x7 0777 -256 «;
int *t = NULL, n, i;
char *s;
for(n=0;; b = s) < // b - changed
long l = strtol(b, &s, 0); // You can use 10, see man
if(b==s) break;
t = realloc(t, sizeof(int)*(n+1));
t[n++] = l;
>
for(i=0; i printf(«t[%d] = %d\n», i, t[i]);
>

io ★★
( 22.12.03 00:08:35 MSK )
Ответ на: Re: строка целых чисел в Си от Murr 21.12.03 21:33:27 MSK

Re: Re: строка целых чисел в Си

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

lg ★★
( 22.12.03 09:20:49 MSK )
Ответ на: Re: строка целых чисел в Си от Murr 21.12.03 21:33:27 MSK

Re: Re: строка целых чисел в Си

Огромное спасибо, очень помогли.

anonymous
( 22.12.03 11:52:17 MSK )
Ответ на: Re: Re: строка целых чисел в Си от anonymous 22.12.03 11:52:17 MSK

Re: Re: Re: строка целых чисел в Си

Гы. А потом выяснитс я, что пробелов между числами — произвольное кол-во , а кроме того — там же будут и табы всех видов и проч. херня. Зачем велосипед-то изобретать? sscanf все это умеет делать, причем гораздо качественнее.

Flogger_d ★
( 22.12.03 12:23:33 MSK )
Ответ на: Re: Re: Re: строка целых чисел в Си от Flogger_d 22.12.03 12:23:33 MSK

Re: Re: Re: Re: строка целых чисел в Си

Так что — первый вариант более правильный. Единственное НО. Перед запуском цикла неплохо бы отпозиционироваться на начало числа — ведь не факт, что строка начинается не с пробелов. Далее — по тексту возражений нет.

Flogger_d ★
( 22.12.03 12:28:29 MSK )
Ответ на: Re: Re: Re: строка целых чисел в Си от Flogger_d 22.12.03 12:23:33 MSK

Re: Re: Re: Re: строка целых чисел в Си

ну каждому свое . если в строке хотя бы 100000 таких чисел то все умрет .. перегнать 20Tb это вам не быстрое занятие .. и еще в момент realloca() потребуется в _два_ раза больше памяти чем реально нужно .. и в конце концов когда ты прождешь три часа пока все это отработает realloc вывалится с ошибкой типа не хватает памяти батенька .. нет уж, по мне лучше написать минипарсер(даже не парсер .. две строки)

lg ★★
( 22.12.03 15:07:10 MSK )
Ответ на: Re: Re: Re: Re: строка целых чисел в Си от lg 22.12.03 15:07:10 MSK

Re: Re: Re: Re: Re: строка целых чисел в Си

Ну, батенька — не надо передергивать. Когда такими объемами кидаются,
то речь явно не идет о массивах — как о непрерывных кусках памяти. В
вашем случае будет использован связный список и все неприятности с
реаллоком пропадут сами собой. Так что.

Как преобразовать строку в массив js?

Помимо вышеупомянутых способов преобразования строки в массив, есть ещё один метод, которым можно воспользоваться.
Это Array.from():
Данный метод работает очень просто. Вся его работа описана в примере ниже:

const stringOfNumbers = '1234'; const numbers = Array.from(stringOfNumbers); console.log(numbers); // => ['1', '2', '3', '4'] - элементы массива - строки 

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

const stringOfNumbers = '1 2.3,4'; const numbers = Array.from(stringOfNumbers); console.log(numbers); // => ['1', ' ', '2', '.', '3', ',', '4'] 

27 октября 2021

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

const str = 'мама мыла раму'; // исходная строка const result = str.split(' '); // используем метод split с указанием разделителя // ['мама', 'мыла', 'раму'] 

В примере выше использовался метод split для разделения строк на элементы по определенному разделителю. Если указать в качестве разделителя пустую строку, то на выходе получим массив из символов:

// вызываем метод на строке и выводим результат console.log('test'.split('')); // => ['t', 'e', 's', 't'] 

Также строки имеют некоторые свойства массивов: их можно перебирать в циклах а также можно обращаться к символам через индексы:

// перебираем строку в цикле for (const symbol of 'test')  console.log(symbol); > // обращение по индексу console.log('test'[1]); // => 'e' 

Есть также быстрый способ разбить строку на символы с использованием рест-оператора:

const result = [. 'hello']; // ['h', 'e', 'l', 'l', 'o']; result.forEach((item) => console.log(item)); 

Как перевести string в массив integer в с++?

Решение в духе stl (вектор вместо сырого массива):

#include #include #include #include #include #include using namespace std; int main() < string s = "74 319 432 82 95 0 1"; stringstream ss(s); vectorv; copy(istream_iterator(ss), <>, back_inserter(v)); copy(begin(v), end(v), ostream_iterator(cout, " ")); > 

Отслеживать
ответ дан 28 фев 2016 в 19:43
28.8k 12 12 золотых знаков 59 59 серебряных знаков 118 118 бронзовых знаков

Плюсанул @alexolut, но решил предложить:

Решение с частичкой духа stl (вектор вместо сырого массива, но без stringstream):

#include #include #include #include #include #include using namespace std; int main() < string s = "74 319 432 82 95 0 1"; vectorv; auto ptr = s.c_str(); char *endptr = nullptr; while (ptr != s.c_str() + s.size()) < auto value = strtol(ptr, &endptr, 10); if (ptr == endptr) < ptr++; >else < ptr = endptr; v.push_back(value); >> copy(begin(v), end(v), ostream_iterator(cout, " ")); > 
if (ptr == endptr) 

нужна, что бы пропустить невалидный символ и не зациклиться (попробуем следующий). При таком раскладе подобный вход:

string s = "f74 319 a432 82 95 0 1"; 

тоже будет обработан: всё, не числовое будет отброшено.

Стоит ещё проверять errno на ERANGE , и пытаться применять, например, strtoll()

Статья c# Как преобразовать строку в массив?

В этой статье хочу показать несколько простых способов, с помощью которых можно преобразовать строку в массив.

Так как любая строка в языке c# представляет собой набор символов, то для того, чтобы из строки получить массив нужно всего лишь воспользоваться обычным циклом for, например:

string str = @"массив"char [] ar = new char [str.Length]; for(int i = 0; i

28849

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

string str = @"мама мыла раму"; char [] ar = str.ToCharArray();

28850

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

string str = @"язык c#"; char [] ar = str.ToArray();

28851

  • Как создать dll библиотеку?
  • Создание контекстного меню в программе Visual Studio
  • Как установить MySQL for Visual Studio?

Добавить комментарий

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