Разбить предложение на слова и занести каждое в массив - 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, что означает успешное выполнение.