Записать строку с клавиатуры в массив - C (СИ)
Формулировка задачи:
Здравствуйте, столкнулся с небольшой проблемой. Я ввожу с клавиатуры предложение, программа удаляет знаки препинания и записывает получившуюся(слитную) строку в массив.
Пример: Что ввожу: primer stroki v massive
Что хочу получить: primerstrokivmassive
Но у меня ошибка где-то в коде.
#include <stdio.h>
#include <string.h>
int main()
{
char str[80];
char* t;
char znak[]={' ', ',','/', '\\'};
char *mass;
mass = malloc(sizeof(char) * 100000000);
int i=0;
printf("\nVvedite stroku:\n");
gets(str);
t=strtok(str,znak);
while (t != NULL)
{
mass[i]=t;
i++;
t = strtok (NULL,znak);
}
printf("массив: %s\n", mass);
return 0;
}Решение задачи: «Записать строку с клавиатуры в массив»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str[80];
char *mass;
mass = malloc(sizeof(char) * 1000);
printf("\nVvedite stroku:\n");
gets(str);
for(int i = 0, j = 0; str[i]; ++i)
{
if((str[i] >= ' ' && str[i] <= '/') || (str[i] >= ':' && str[i] <= '@'))
continue;
mass[j] = str[i];
j++;
}
printf("массив: %s\n", mass);
return 0;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек:
, , - Объявление переменных:
- str[80] - массив символов для хранения строки, введенной пользователем
- mass - указатель на начало блока памяти, выделенного динамически
- Выделение памяти под массив символов с помощью функции malloc
- Вывод сообщения с приглашением ввести строку
- Ввод строки с клавиатуры с помощью функции gets
- Условие цикла for:
- i - индекс символа в строке
- j - индекс символа в массиве
- Проверка каждого символа строки на соответствие условию:
- Если символ является пробелом, запятой, точкой, запятой, двоеточием, то он пропускается
- Если символ не соответствует условию, то он копируется в массив
- Копирование символа в массив и увеличение индекса j
- Вывод содержимого массива с помощью функции printf
- Возврат 0, что означает успешный конец работы программы