Заменить в строке все удвоенные символы на один - 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;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.583 из 5
Похожие ответы