Разделить строку на подстроки - C (СИ) (72446)

Узнай цену своей работы

Формулировка задачи:

В общем, есть текст:
char text[1024] = "39   71  72  89  207 208 210 224 227 232 237 239 241 242 243 246 268 269 271 272 280 \n\
282 283 285 287 288 289 290 291 292 300 308 326 328 329 330 331 332 333 334 337 340 \n\
341 342 343 344 345 346 347 348 349 351 352 353 355 356 357 358 359 360 363 364 366 \n\
367 368 369 371 372 373 374 375 376 377 378 379 380 381 382 383 384 386 402 403 404 \n\
419 424 434 437 438 439 440 444 447 453 462 464 465 471 478 481 482 487 489 491 492 \n\
493 494 496 500 502 572 573 576 577 580 581 582 586 596 601 603 604 611 619 620 622 \n\
623 624 625 627 628 630 631 634 637 638 641 646 647 649 655 663 670 671 674 677 678 \n\
679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 697 698 705 707 \n\
709 710 711 712 713 714 718 720 721 722 724 727 728 729 730 731 732 733 734 735 736 \n\
737 738 739 740 741 743 745 747 752 754 890 892 900 ";
В каждой строчке 21 число, строчки разделены \n, числа разделены \t Нужно получить массив чисел. Как это можно сделать? Я пробовал использовать strtok() два раза в двух вложенных циклах, но они как бы мешают друг другу и ничего не работает. Буду очень признателен за вашу помощь.
Вроде разобрался. Сделал два цикла, не вложенных друг в друга.

Решение задачи: «Разделить строку на подстроки»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main(int argc, char** argv)
{
    char string[1024] = "207 208 210 224 227\n232 237 239 241 242\n243 246 268 269 271\n";    
    char delimiter[] = " \n", *ptr = strtok(string, delimiter);
    
    int i = 0, lines = 3, *array = (int*) malloc(lines * 5 * sizeof(int));  
    
    while(ptr != NULL)
    {        
        array[i++] = atoi(ptr);
        
        ptr = strtok(NULL, delimiter);        
    }
 
    free(array); 
    
    return EXIT_SUCCESS;    
}

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

Выполняемый файл на языке C выполняет следующие действия:

  1. Подключение необходимых библиотек:
    • stdio.h - для работы с консолью
    • stdlib.h - для работы с функциями, использующими стандартные входы и выходы
    • string.h - для работы со строками
  2. Определение переменных:
    • string - массив символов, содержащий входную строку
    • delimiter - массив символов, содержащий разделитель
    • ptr - указатель на первый символ входной строки
    • i - счетчик для обработки каждой строки входной строки
    • lines - количество строк во входной строке
    • array - массив указателей на переменные типа int для хранения чисел
  3. Выделение памяти под массив:
    • Вызывается функция malloc для выделения памяти под массив из lines строк, каждая из которых содержит 5 чисел
  4. Цикл обработки строк входной строки:
    • В цикле while происходит поиск каждой строки входной строки, используя функцию strtok
    • Каждое найденное число конвертируется в тип int с помощью функции atoi и сохраняется в соответствующем месте в массиве array
    • Указатель ptr перемещается к следующей строке с помощью strtok(NULL, delimiter)
  5. Освобождение памяти:
    • Вызывается функция free для освобождения памяти, выделенной под массив array
  6. Возврат успешного выполнения программы:
    • Возвращается значение EXIT_SUCCESS, указывающее на успешное выполнение программы

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

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