Преобразование строки в числовой массив - 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;
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы: , ,
  2. Определяем функцию Str2Arr, которая принимает два аргумента: char S (строка) и int Arr (массив целых чисел).
  3. Внутри функции объявляем переменные:
    • int c,i,j,l,k; - для хранения индексов и счетчиков
    • char q; - для хранения символа
    • l=strlen(S); - вычисляем длину строки
    • c=0; - инициализируем счетчик
    • k=0; - инициализируем счетчик
    • j=0; - инициализируем счетчик
  4. Запускаем цикл 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 в соответствии с десятичной системой и добавляя значение текущего символа (в числовом формате)
    • }
  5. После прохода по всем символам строки, проверяем значение k. Если оно больше 0, значит последнее число не было полностью обработано, и мы добавляем его в массив Arr.
  6. В функции main создаем массив Z[100] и инициализируем все его элементы значением 0.
  7. Затем вызываем функцию Str2Arr, передавая ей строку 56 0 0 12 9 7 3 и массив Z в качестве аргументов.
  8. Результат работы функции сохраняем в переменной n.
  9. Затем с помощью цикла for выводим все элементы массива Z на экран.
  10. В конце программы вызываем функцию system(PAUSE), чтобы программа не закрылась сразу после вывода последнего элемента массива.
  11. Возвращаем 0, чтобы указать, что программа успешно завершилась.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.4 из 5
Похожие ответы