В символьной строке оставить только те слова, которые состоят только из разных букв - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д