@Bahantay

Написать функцию которая возвращает строку с тремя пробелами между слов, начало и конец строки не должны быть с пробелом?

Доброго времени суток! Может кто сможет помочь, в общем нужно написать функцию которая возвращает строку с тремя пробелами между слов, начало и конец строки не должны быть с пробелом
6045229d684d2140355546.png

пишу на c вот что получается

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
  
// Function to replace a string with another 
// string 
char* replaceWord(const char* s, const char* oldW, 
                  const char* newW) 
{ 
    char* result; 
    int i, cnt = 0; 
    int newWlen = strlen(newW); 
    int oldWlen = strlen(oldW); 
  
    // Counting the number of times old word 
    // occur in the string 
    for (i = 0; s[i] != '\0'; i++) { 
        if (strstr(&s[i], oldW) == &s[i]) { 
            cnt++; 
  
            // Jumping to index after the old word. 
            i += oldWlen - 1; 
        } 
    } 
  
    // Making new string of enough length 
    result = (char*)malloc(i + cnt * (newWlen - oldWlen) + 1); 
  
    i = 0; 
    while (*s) { 
        // compare the substring with the result 
        if (strstr(s, oldW) == s) { 
            strcpy(&result[i], newW); 
            i += newWlen; 
            s += oldWlen; 
        } 
        else
            result[i++] = *s++; 
    } 
  
    result[i] = '\0'; 
    return result; 
}

char* expand_string(char* param_1)
{
  int count = 0;
  char* result=malloc(strlen(param_1)+1);
  for(int i=0; param_1[i]!='\0'; i++)
  {        
        if (param_1[i]!=' ')
        {
            result[count]=param_1[i];
            count++;
        }
        else 
        {
            if(i==0)
            {
                continue;
            }
            else if (param_1[i+1]==' '&&param_1[i+2]==' '&&param_1[i+3]==' ')
            {
                continue;
            }
            else if (param_1[i+1]==' '&&param_1[i+2]!=' ')
            {   
                char* c=" ";
                char* d="   ";
                result = replaceWord(param_1, c, d);
                count+=3;
            }    
            else
            {
                result[count]=param_1[i];
                count++;
            }
        }
  }
  result[count]='\0';
  return result;
}

int main()
{
    char* result=expand_string(" see what will          happen next");
    printf("%s\n", result);
    free(result);
}


вывод таков: 604522eecd282717581764.png
  • Вопрос задан
  • 245 просмотров
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Лень разбираться в вашем коде, но на кой черт там вообще замена? Эта задача решается потоково - прочитали символ из входной строки, добавили от 0 до 4-х символов выходную строку. Можно еще сначала один раз пройтись и подсчитать длину в ответа, если жалко 3*strlen(input) заводить. Длина ответа - 3*(k-1) + c, где k - количество слов, а с - количество непробельных символов.

Главное наблюдение - любое слово начинается с непробельного символа, перед которым идет пробельный (или начало строки).

Соответственно решение вообще тупое - прочитали непробельный символ - если он начало слова, вывели 3 пробела. В любом случае вывели этот непробельный символ. Если прочитали пробельный символ - пропустили его (ну или флаг установили для упрощения кода в первом случае).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы