Преобразование строки в числовой массив - C (СИ)
Формулировка задачи:
Привет всем. Кто-нибудь знает как строку заполненную числами преобразовать в числовой массив? Сама смогла найти только как с помощью функции atoi преобразовать строку в число. Если кто-нибудь знает киньте код или хотя бы алгоритм.
Решение задачи: «Преобразование строки в числовой массив»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int Str2Arr(char *S, int *Arr)
{
int c,i,j,l,k;
char q;
l=strlen(S);
c=0;
k=0;
j=0;
for (i=0; i<l; i++)
{
q=S[i];
if (q==' ')
{
if (k>0)
{
Arr[j++]=c; c=0; k=0;
}
}
else
{
k=k+1;
c=c*10+(q-'0');
}
}
if (k>0)
{
Arr[j++]=c; c=0; k=0;
};
return j;
}
int main(int argc, char *argv[])
{
int Z[100];
int i,n;
char *Str="56 0 0 12 9 7 3";
for (i=0; i<100; i++) Z[i]=0;
n=Str2Arr(Str,Z);
for (i=0; i<n; i++) printf("%d\n",Z[i]);
system("PAUSE");
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы:
, , - Определяем функцию Str2Arr, которая принимает два аргумента: char S (строка) и int Arr (массив целых чисел).
- Внутри функции объявляем переменные:
- int c,i,j,l,k; - для хранения индексов и счетчиков
- char q; - для хранения символа
- l=strlen(S); - вычисляем длину строки
- c=0; - инициализируем счетчик
- k=0; - инициализируем счетчик
- j=0; - инициализируем счетчик
- Запускаем цикл for для прохода по каждому символу строки S:
- q=S[i]; - сохраняем текущий символ в переменную q
- if (q==' ') - если текущий символ равен пробелу
- {
- if (k>0) - если в массиве Arr уже есть элементы
- {
- Arr[j++]=c; - добавляем значение c в массив Arr и увеличиваем счетчик j
- c=0; - сбрасываем значение c (готов к следующему числу)
- k=0; - сбрасываем значение k (готов к следующему числу)
- }
- }
- else - если текущий символ не равен пробелу
- {
- k=k+1; - увеличиваем значение k (число еще не закончилось)
- c=c*10+(q-'0'); - получаем число, увеличивая значение c на 10 в соответствии с десятичной системой и добавляя значение текущего символа (в числовом формате)
- }
- После прохода по всем символам строки, проверяем значение k. Если оно больше 0, значит последнее число не было полностью обработано, и мы добавляем его в массив Arr.
- В функции main создаем массив Z[100] и инициализируем все его элементы значением 0.
- Затем вызываем функцию Str2Arr, передавая ей строку
56 0 0 12 9 7 3и массив Z в качестве аргументов. - Результат работы функции сохраняем в переменной n.
- Затем с помощью цикла for выводим все элементы массива Z на экран.
- В конце программы вызываем функцию system(
PAUSE), чтобы программа не закрылась сразу после вывода последнего элемента массива. - Возвращаем 0, чтобы указать, что программа успешно завершилась.