Отредактировать текст так, чтобы предложения в тексте разделялись ровно двумя пробелами - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Дан произвольный текст. Отредактировать текст так, чтобы а) между словами был ровно один пробел б)предложения в тексте разделялись ровно двумя пробелами
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main()
{
    int i,l,j;
    char str[100],str1[150];
    puts("\n Vvedite stroky: ");
    gets(str);
 
    l=strlen(str);
    j=0;
    for(i=0;i<l;i++)
    {
        str1[j]=str[i];
        if(str[i]==' ' && str[i]==' ')
        {
            i++;
        }
        if(str[i]=='.'||str[i]=='!'||str[i]=='?')
        {
            j++;
            str1[j]=' ';
            j++;
        }
        
        j++;
    }
    l=strlen(str1);
    for(i=0;i<l;i++)
        printf("%c",str1[i]);
}

Решение задачи: «Отредактировать текст так, чтобы предложения в тексте разделялись ровно двумя пробелами»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
 
#define SEC_ENDS ".!?"
#define DELIMS " \t\n"
 
int main(void){
    char buf[BUFSIZ], * p;
    
    while ( printf("\nString: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' )
        for ( p = strtok(buf, DELIMS); p; p = strtok(NULL, DELIMS) )
            printf("%s%s", p, ( strchr(SEC_ENDS, p[strlen(p) - 1]) ) ? "  " : " ");
    
    return 0;
}

Объяснение кода листинга программы

  1. Подключение необходимых библиотек: и .
  2. Определение двух констант: SEC_ENDS (конец строки) и DELIMS (разделитель).
  3. Объявление переменных: buf (буфер для ввода строки) и p (указатель на текущий токен).
  4. Вход в цикл while, который будет выполняться до тех пор, пока пользователь не введет пустую строку.
  5. Внутри цикла запрашивается строка у пользователя с помощью функции fgets.
  6. Далее начинается внутренний цикл for, который будет выполняться для каждого токена в строке.
  7. В каждой итерации внутреннего цикла выводится текущий токен.
  8. Если последний символ текущего токена совпадает с одним из символов, указанных в константе SEC_ENDS, то выводится   (два пробела).
  9. Если последний символ текущего токена не совпадает ни с одним из символов, указанных в константе SEC_ENDS, то выводится (один пробел).
  10. В конце программы возвращается 0, что означает успешное завершение работы программы.

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


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

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

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