C/C++
Кто поможет в языке Си, с массивом. Не могу понять как сделать
Вводится строка, состоящая из слов разделенных точками.Длина строки может быть разной.Сформировать и вывести подстроку, расположенную между второй и пятой точками исходной строки.Если в строке менее пяти точек, то вывести всю исходную строку.
#include <stdio.h>
int main()
{
int count_point = 0; /* счётчик точек */
const int size = 1024; /* максимальный размер строки */
char str1[size],str2[size]; /* строка и подстрока */
scanf("%s",str1); /* вводится строка, scanf_s для visual c */
int i = 0, j = 0; /* для индексов массивов */
while(str1[i])
{
if(count_point < 2) /* точек меньше 2 */
{
if(str1[i] == '.') count_point++; /* нашли точку, увеличили счётчик */
}
else if(count_point < 5) /* точек меньше 5 */
{
if(str1[i] == '.')
{
count_point++;
if(count_point >= 5) break; /* чтобы не скопировать пятую точку
и то, что после неё */
}
str2[j] = str1[i]; /* копируем по одному символу */
j++; /* увеличить счётчик индекса второй строки */
str2[j] = '\0'; /* чтобы после строки не было мусора */
}
i++; /* увеличить счётчик индекса первой строки */
}
if(count_point < 5) /* если точек меньше 5 */
{
printf("%s\n",str1); /* вывод исходной строки */
}
else /* иначе */
{
printf("%s\n",str2); /* вывод новой строки */
}
return 0;
}
int main()
{
int count_point = 0; /* счётчик точек */
const int size = 1024; /* максимальный размер строки */
char str1[size],str2[size]; /* строка и подстрока */
scanf("%s",str1); /* вводится строка, scanf_s для visual c */
int i = 0, j = 0; /* для индексов массивов */
while(str1[i])
{
if(count_point < 2) /* точек меньше 2 */
{
if(str1[i] == '.') count_point++; /* нашли точку, увеличили счётчик */
}
else if(count_point < 5) /* точек меньше 5 */
{
if(str1[i] == '.')
{
count_point++;
if(count_point >= 5) break; /* чтобы не скопировать пятую точку
и то, что после неё */
}
str2[j] = str1[i]; /* копируем по одному символу */
j++; /* увеличить счётчик индекса второй строки */
str2[j] = '\0'; /* чтобы после строки не было мусора */
}
i++; /* увеличить счётчик индекса первой строки */
}
if(count_point < 5) /* если точек меньше 5 */
{
printf("%s\n",str1); /* вывод исходной строки */
}
else /* иначе */
{
printf("%s\n",str2); /* вывод новой строки */
}
return 0;
}
Дмитрий Слезкин
Только не вводите пробелы и знаки табуляции.
Кол. точек = 0
Цикл считывания символов из строки пока не конец (0 символ)
встречена точка, то кол. точек + 1
Если кол точек >= 2 && <5 то вывести этот символ на экран
Это было бы удобно для вывода, но у вас сказано что если менее 5, то выводить всю строку...а это не так эффективно.
Допустим строка из триллион символов, где там эта точка будет еще вопрос. Если это кидать на экран, то может и зря, а хранить все до 2 точки тоже не хватит никакой памяти. Скорее придется выяснить, что в строке есть более 5 точек и выйти. А уже исходя из этого или алгоритм выше или алгоритм по выводу всей этой огроменной строки.
Цикл считывания символов из строки пока не конец (0 символ)
встречена точка, то кол. точек + 1
Если кол точек >= 2 && <5 то вывести этот символ на экран
Это было бы удобно для вывода, но у вас сказано что если менее 5, то выводить всю строку...а это не так эффективно.
Допустим строка из триллион символов, где там эта точка будет еще вопрос. Если это кидать на экран, то может и зря, а хранить все до 2 точки тоже не хватит никакой памяти. Скорее придется выяснить, что в строке есть более 5 точек и выйти. А уже исходя из этого или алгоритм выше или алгоритм по выводу всей этой огроменной строки.
- Между словами может быть только одна точка или несколько?
- Они разделены ТОЛЬКО точкой? или еще и пробелом?
- Они разделены ТОЛЬКО точкой? или еще и пробелом?
Дмитрий Слезкин
На сколько я понял, пробелов и табуляций нет. Только точки, как разделители и их может быть сколько угодно.
Похожие вопросы
- Помогите Программирование на Си (одномерные массивы)
- Помогите добавить ввод чисел в массив матрицы на языке Си
- Упорядочить элементы массива по возрастанию на языке Си
- Как ввести строчный массив через scanf_s в языке Си
- Как обработать этот массив на языке Си?
- Одномерные массивы на языке си
- Массивы в языке Си
- Язык Си. Сортировка и поиск элементв массива
- Помогите с решением задачи на языке СИ
- Язык Си. Сортировка и поиск элементов массива