//как минимум
min = tmp;
str2 = str1;
}
}
}
}
return str2; //возвращаем указатель на начало слова, начинающегося с самой младшей латинской буквы
}
3.1.8. Написать функцию, удаляющую из строки комментарии вида "/* ... */". Игнорировать вложенные комментарии.
Постановка задачи: В фал записывается строка. В этой строке есть комментарии. Исходя из условия задачи, делаем вывод, что вложенные комментарии удаляются. Если в строке есть открытие комментарий, но нет их закрытия, то все что идет после начала комментарий удаляется до конца строки.
Описание алгоритма: Передаём в функцию имя файла. Считываем из него по одному символу из файла если видим открывающийся комментарий поднимаем флаг, если закрывающийся то опускаем и в зависимости от флага печатаем символ или нет.
текст
#include <stdio.h>
#include <stdlib.h>
char* comment (char * fname){
FILE *in;
char input;
int stat;
char *text;
int kol=0;
in=fopen(fname,"ro"); //открываем файл
stat=0;
text=calloc(1,sizeof(char)); //выделение памяти для выходной строки
while(fscanf(in,"%c",&input)!=EOF){
if(input=='/'){ // если встретили «/»
fscanf(in,"%c",&input); // считываем из файла один символ
if(input=='*') stat++; //и встретили «*» после «/», поднимаем флаг
}
if((input=='*')&&(stat>0))
{
fscanf(in,"%c",&input); // считываем из файла один символ
if(input=='/') {stat--; //если встретили “*/” опускаем флаг
fscanf(in,"%c",&input);} // считываем из файла один символ
}
if(stat==0){
text = realloc(text, (kol+2) * sizeof(char)); //выделяем память для
// следующего элемента
text[kol]=input; //заносим текущий символ в выходную строку
kol++;
} }
fclose(in);
return text; //возвращаем указатель на начало результирующей строки
}
3.1.9. Написать функцию, выполняющую поиск в строке наиболее часто встречающегося символа, и заменяющую его на пробел.
Постановка задачи : Дана строка, состоящая из набора символов. Задача найти наиболее часто повторяющийся символ и заменить его пробелами. Символ пробел исключается из рассмотрения.
да
да
да
нет да
Описание алгоритма: В функцию передаются указатели на начало исходной строки и на начало результирующей. Определяем длину исходной строки, для организации цикла по всей длине строки. Организуем два цикла по всей длине строки, таким образом, берется символ, сравнивается со всеми символами в строчке, если находиться такой же символ, то увеличиваем счетчик на один, при следующем проходе берется следующий символ в строке и также сравнивается со всеми символами, далее сравниваются счетчики, где число больше, тот и запоминается и запоминается символ которому принадлежит этот счетчик. Таким образом, пройдя по всей длине строки в результате получается символ с наибольшим повторение в строке. Далее прогоняя еще раз исходную строчку, символ меняется на пробел. Сам пробел игнорируется как наиболее часто встречающийся символ.
текст программы:
/* в функцию передаются указатели на начало исходной строки (*str1) и на начало результирующей (*str2)*/
int func(char *str1, char *str2){
int i, j, len;
int max = 0, tmp_max = 0;
char c;
len = strlen(str1); // определяем длину строки, то есть количество символов в строке
for(i = 0;i < len;i ++){ //цикл по все длине строки
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.