строка целых чисел в Си
Здравствуйте. Подскажите, как преобразовать строку вида:
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: строка целых чисел в Си
Ну, батенька — не надо передергивать. Когда такими объемами кидаются,
то речь явно не идет о массивах — как о непрерывных кусках памяти. В
вашем случае будет использован связный список и все неприятности с
реаллоком пропадут сами собой. Так что.
Статья c# Как преобразовать строку в массив?
В этой статье хочу показать несколько простых способов, с помощью которых можно преобразовать строку в массив.
Так как любая строка в языке c# представляет собой набор символов, то для того, чтобы из строки получить массив нужно всего лишь воспользоваться обычным циклом for, например:
string str = @"массив"char [] ar = new char [str.Length]; for(int i = 0; i
Второй способ позволяет преобразовать строку в массив буквально в одну строчку кода. Для этого всего лишь нужно воспользуемся уже готовым методом ToCharArray, например:
string str = @"мама мыла раму"; char [] ar = str.ToCharArray();
Третий способ, очень похож на предыдущий, единственное его отличие в том, что преобразование строки выполняется с помощью метода расширения ToArray, в результате так же получаем массив.
string str = @"язык c#"; char [] ar = str.ToArray();
- Как создать dll библиотеку?
- Создание контекстного меню в программе Visual Studio
- Как установить MySQL for Visual Studio?
Как перевести 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# на winформе не пускает ни один вариант.
И так есть строка (пока прописью) «534 543 657 787 989 343 767 787» (это пример)
Понятно нужно преобразовать в массив на подобии
int[] mas = {534 543 657 787 989 343 767 787}
Через запятые понятно дело.
Но никак не удается?
по сути код выглядит вот так
1 2 3 4 5 6 7 8 9
string line = Mass(); var ints = line.Split(' ').Select(Int32.Parse).ToArray(); // это уже для визуализации string line2 = Convert.ToString(line[4]); textBox1.Text = line2;
Он ругается. Вводная строка имеет неверный формат. В консоле прогоняю все чисто
Что не так?
Добавлено через 3 минуты
За одно может подскажите простой метод вывода массива интов на текст бокс.
Добавлено через 2 минуты
Интереса ради загнал щас
line = "567 787 987 767 890";
съел значит что то не так в моей строке. . после обработки .
Добавлено через 4 минуты
Проблема где то вот тут в пробеле ?
mass = " "+mass + line4 + line5 + line6;
Вот куда тут правильно пробел поставить? Тут у меня как бы строка собирается из трех цифр, ставится пробел, потом проходит снова цикл (считывания файла) получает три цифры и так по кругу
Пробелами я разделил по три цифры что б вместо 56775775666777566775 было (мне так нудно) 567 787 654 и т.д.
| Здесь вы можете заказать любую студенческую или школьную работу. |
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Преобразование из чисел в строки
Прошу помощи с программой в windowsformsapplication Нужно вывести в listview. № Элемента в.
Преобразование строки в массив символов
Господа, есть примитивный код, который считывает введенную строку, потом считанную строку.
Преобразование json строки в массив
Вот допустим у меня строка можно как то в json или массив её преобразовать ?
Преобразование чисел с запятой из строки в число
Как сделать, чтобы float.Parse понимал число с запятой в качестве десятичного разделителя? UPD.
![]()
15185 / 10465 / 2746
Регистрация: 21.04.2018
Сообщений: 31,023
Записей в блоге: 2
Посмотрите соседнюю тему Удаление пробелов в строковом массиве
Регистрация: 24.09.2018
Сообщений: 9
Вот так в реале выглядить моя строка mass с пробелом на конце (копипаст)
514 532 536 525 501 465 420 370 318 266 219 177 144 121 109 108 116 135 162 196 236 280 328 377 424 468 468 503 528 538
Добавлено через 1 минуту
Дак и че я удалю.
Мне то нужны цифры 567 787 и т.д. он выдаст мне 5, 6, 7, 7, 8, 7 в массиве
![]()
15185 / 10465 / 2746
Регистрация: 21.04.2018
Сообщений: 31,023
Записей в блоге: 2
И не совсем понятно, чего Вам надобно.
У Вас есть входной string в котором находятся целые числа, надо конвертировать его в список int.
1. Только положительные или любые числа?
2. Какие разделители возможны, допустимы?
3. Что делать, если в строке символ отличный от числа и разделителя? Выбрасывать исключение?
Для выходного формата, Вам надо получить список чисел разделённых пробелом
1. Как хранится у Вас список исходных int?
2. Почему в Вашем примере Вы работаете со списком не как с числами, а как с цифрами?
Добавлено через 47 секунд
Сообщение от Swat701 