Разбить предложение на слова и занести каждое в массив - C (СИ)
Формулировка задачи:
В общем, трабл начинается на 3 слове, первые 2 записывает нормально, а на 3 слове аварийное завершение программы.
Фрагмент кода:
char string[] = "I love you"; char mass[3][10]; for( i = 0, j = 0, k = 0; i < 3; i++, j++) { while( string[j] != ' ') {mass[i][k] = string[j]; k++; j++;} mass[i][k] ='\0'; printf("%s\n", mass[i]); k = 0; }
Если ставлю после you пробел, то работает нормально.
Проблема решена. Дописал в условие проверку на терминальный ноль.
Решение задачи: «Разбить предложение на слова и занести каждое в массив»
textual
Листинг программы
#include <stdio.h> int main(void) { char string[] = "I love you"; char mass[3][10]; size_t i, j; for(i = 0, j = 0; i < 3; i++, j++){ size_t k = 0; while(string[j] != ' ' && j < strlen(string)){ mass[i][k++] = string[j++]; } mass[i][k] ='\0'; printf("%s\n", mass[i]); } return 0; }
Объяснение кода листинга программы
В этом коде:
- Объявлены переменные:
string
- строка, содержащая предложениеI love you
.mass
- массив из трех строк, каждая из которых содержит подстроку из предложения.i
иj
- индексы, используемые в цикле.k
- индекс, используемый внутри цикла while.
- В цикле for происходит следующее:
- Переменная
i
инициализируется значением 0, а переменнаяj
- значением 0. - Цикл выполняется три раза (для каждого подмассива
mass
). - Внутри цикла while происходит следующее:
- Переменная
k
инициализируется значением 0. - В цикле while происходит заполнение текущего подмассива
mass[i]
символами из строкиstring
, пока не встретится пробел или не закончится строкаstring
. - После окончания цикла while, в последнем символе строки
mass[i]
устанавливается символ конца строки\0
. - Выводится текущий подмассив
mass[i]
.
- Переменная
- По завершении цикла for программа возвращает 0, что означает успешное выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д