В символьной строке оставить только те слова, которые состоят только из разных букв - C (СИ)
Формулировка задачи:
Мне дали такое задание В символьной строке оставить только те слова, которые состоят только из разных букв.
Но сказали что нельзя использовать два массива и использовать только стандартные функции
Однако если вы можете используя другие пожалуйста объясните что они делают( т.к. я первокурсник и знаю не много) Вот сам код но он не верен т.к. работает не всегда
#include<stdio.h>
void main(void)
{
char line[1000];
int i, j, a, b, flag;
i = 0;
j = 0;
a = i;
flag = 0;
printf("Enter the string:\n");
gets(line);
while (line[i] != '\0')
{
if (line[i] == ' ' || line[i] == '.' || line[i] == ',' || line[i] == '!' || line[i] == '?' || line[i] == '\t')
{
if (flag == 0)
{
while (a != i)
{
line[j] = line[a];
j++;
a++;
}
}
else
{
line[j] = line[i];
flag = 0;
}
j++;
i++;
a = i;
}
else
{
b = i + 1;
while (line[b] != ' ' && line[b] != '.' && line[b] != ',' && line[b] != '!' && line[b] != '?' && line[b] != '\t' && line[b] != '\0' && flag != 1)
{
if (line[i] == line[b])
{
flag = 1;
}
b++;
}
i++;
}
}
if (flag == 0)
{
while (a != i)
{
line[j] = line[a];
j++;
a++;
}
}
else
{
line[j] = line[i];
flag = 0;
}
line[j] = line[i];
printf("Summary line:\n");
puts(line);
}Решение задачи: «В символьной строке оставить только те слова, которые состоят только из разных букв»
textual
Листинг программы
#include <stdio.h>
int main()
{
char s[80];
int i = 0, j, k, m, flag = 0, xflag = 0;
puts("Input line");
fgets(s, 80, stdin);
while(s[i]){
if(s[i] != ' ' && flag == 0){
flag = 1;
k = i;
}
if(flag == 1 && (s[i] == ' ' || s[i] == '.' || s[i] == '\n' || s[i] == ',')){
for(j = k; j < i - 1; j++){
for(m = k + 1; m < i; m++){
if(s[j] == s[m] && j != m){
xflag = 1;
}
}
}
if(xflag == 0){
for(j = k; j < i; j++)
printf("%c",s[j]);
printf(" ");
}
xflag = 0;
flag = 0;
}
i++;
}
return 0;
}
Объяснение кода листинга программы
В этом коде:
- Объявлены переменные:
s- символная строка, в которую вводится текст с клавиатуры;i,j,k,m- счётчики для обработки текста;flag- флаг, который отслеживает первое вхождение символа в строку;xflag- флаг, который отслеживает одинаковые символы в строке.
- Ввод строки с клавиатуры.
- В цикле обрабатывается каждый символ в строке. Если текущий символ не пробел и флаг равен 0, то:
- устанавливается флаг
flagравным 1; - сохраняется индекс первого символа в строке.
- устанавливается флаг
- Если флаг равен 1 и текущий символ является пробелом или знаком препинания, то:
- в цикле проходят по всем символам от индекса
kдоi-1, которые не являются пробелами, знаками препинания или текущим символом; - в цикле проверяют каждый символ на равенство текущему символу и его индексу;
- если найден такой символ, то устанавливается флаг
xflagравным 1.
- в цикле проходят по всем символам от индекса
- Если флаг
xflagравен 0, то:- в цикле проходят по всем символам от индекса
kдоi-1и выводят каждый символ; - после вывода символа добавляют пробел.
- в цикле проходят по всем символам от индекса
- После цикла устанавливают флаг
xflagравным 0 и флагflagравным 0. - Цикл продолжается до тех пор, пока не будет введен символ новой строки.
- Программа завершается, возвращая 0.