Заменить в строке все удвоенные символы на один - C (СИ)
Формулировка задачи:
Разработать алгоритм и программу по следующим условием :
Ввести строку длиной до 30 символов , заменить в ней все удвоенные символы на один, пробел - в знак подчеркивания , сообщения ' ** ' на многие точку " ...".
Организовать простой диалог с пользователем для повторения работы программы. Выходные данные каждого цикла работы программы записать в отдельный файл. Реализация должна быть рациональной и работать для общего случая .
Решение задачи: «Заменить в строке все удвоенные символы на один»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char *str, *name;
int index, i, j, loop, counter=0, nIndex;
FILE* oFile;
do{
index=-1;
nIndex=-1;
i=0;
j=0;
loop=0;
str=(char*)malloc(sizeof(char)*31);
name=(char*)malloc(0);
printf("Enter sequence of characters: ");
do{
index++;
if((str[index]=getchar())=='\n'){
str[index]='\0';
str=(char*)realloc(str, sizeof(char)*(index+1));
}
if(index==29){
index++;
str[index]='\0';
}
}while((str[index]!='\0'));
printf("Enter name of file: ");
do{
nIndex++;
name=(char*)realloc(name, sizeof(char)*(nIndex+1));
if((name[nIndex]=getchar())=='\n'){
name[nIndex]='\0';
}
}while((name[nIndex]!='\0'));
oFile=fopen(name, "w");
fflush(stdin);
while(i<index-1){
if((str[i]=='*') && (str[i+1]=='*')){
index++;
str=(char*)realloc(str, sizeof(char)*(index));
for(j=index-1; j>i+1; j--){
str[j]=str[j-1];
}
str[i]=str[i+1]=str[i+2]='.';
i+=3;
}else if(str[i]==str[i+1]){
for(j=i+1; j<index; j++){
str[j]=str[j+1];
}
index--;
str=(char*)realloc(str, sizeof(char)*(index));
}else{
i++;
}
}
i=0;
while(i<index-1){
if(str[i]==' '){
str[i]='_';
}
i++;
}
fprintf(oFile, str);
fclose(oFile);
fflush(stdin);
printf("Do you want to repeat(enter 1 to continue): ");
scanf("%i", &loop);
printf("\n");
counter++;
fflush(stdin);
free(str);
free(name);
}while(loop==1);
return 0;
}