написание функции на СИ

Тема в разделе "C/C++/C#", создана пользователем baha, 30 янв 2011.

  1. baha

    baha Гость

    Функция - Space(s,l). Назначение - доведение строки s до длины l путем вставки пробелов между словами.

    вообщем вот и есть задача, с программированием туго, прошу вашей помощи, кто как и чем сможет.

    кидайте похожие задачи, ссылки, буду очень рад!
     
  2. IrineK

    IrineK Гость

    Код (C++):
    #include <iostream>
    using namespace std;

    //-----------расширение строки пробелами до len
    void Space (char s[80], int len)
    {
    int n=0; //фактическая длина строки
    int k=0; //количество пробелов
    char res[80];
    while(s[n]!='\0')
    {   if(s[n]==' ') k++;
    n++;
    }

    int dif = len-n-1;//разница между желаемой и фактической длиной строки
    int ins = dif/k;//к-во вставляемых пробелов между словами, кроме последнего
    int ins_last = ins+dif%k; //вставляемые пробелы перед последним словом

    int is=0,ir=0,cur=1,j;
    while(is<n)
    {   if (s[is]==' ')
    {   if(cur<k)
    {       for(j=0;j<ins+1;j++)
    res[ir+j]=' ';
    ir+=(ins+1);
    cur++;
    }
    else
    {       for(j=0;j<ins_last+1;j++)
    res[ir+j]=' ';
    ir+=(ins_last+1);
    }
    is++;
    }
    else
    {   res[ir]=s[is];
    ir++;
    is++;
    }
    }
    res[ir]='\0';
    cout<<endl;
    cout<<"The result:\n";
    cout<<res<<endl;   
    }

    int main()
    {
    char str[80];
    cout<<"The line:\n";
    cin.getline(str,80);
    Space(str,80);

    return 0;
    }
    Удачи.
    Если возникают вопросы, меня скорее можно найти на allproblems.ucoz.ru
     
  3. baha

    baha Гость

    спасибо! но мне бы ее на языке С(без плюсов)

    Код (LotusScript):
    /***************************************************************/
    /***********************Файл LAB1_6.C **************************/
    #include <stdio.h>
    #define N 80
    /********************************************************************************
    *******/
    /*Функция доведение строки s до длины l путем вставки пробелов между словами (массивы)*/
    /********************************************************************************
    *******/
    //#include <iostream>
    //using namespace std;

    //-----------расширение строки пробелами до len
    void Space (char *s[N], int len)
    {
    int n=0; //фактическая длина строки
    int k=0; //количество пробелов
    int dif = len-n-1;//разница между желаемой и фактической длиной строки
    int ins = dif/k;//к-во вставляемых пробелов между словами, кроме последнего
    int ins_last = ins+dif%k; //вставляемые пробелы перед последним словом
    int is=0,ir=0,cur=1,j;

    char res[N];
    while(s[n]!='\0')
    {   if(s[n]==' ') k++;
    n++;
    }

    //int dif = len-n-1;//разница между желаемой и фактической длиной строки
    //int ins = dif/k;//к-во вставляемых пробелов между словами, кроме последнего
    //int ins_last = ins+dif%k; //вставляемые пробелы перед последним словом

    //int is=0,ir=0,cur=1,j;
    while(is<n)
    {   if (s[is]==' ')
    {   if(cur<k)
    {       for(j=0;j<ins+1;j++)
    res[ir+j]=' ';
    ir+=(ins+1);
    cur++;
    }
    else
    {       for(j=0;j<ins_last+1;j++)
    res[ir+j]=' ';
    ir+=(ins_last+1);
    }
    is++;
    }
    else
    {   res[ir]=s[is];
    ir++;
    is++;
    }
    }
    res[ir]='\0';

    printf("\n");
    printf("The result:\n");
    printf("%c",res);
    //cout<<endl;  
    //cout<<"The result:\n";
    //cout<<res<<endl; 
    }

    int main()
    {
    char str[N];
    int len=0;
    printf("The line:\n");
    //cout<<"The line:\n";
    gets(str);
    Space(str,len);
    }
    вот собственно попытался изменить, компилируется, но вылетает после ввода символов, подскажите что не так? для компиляции переместил инициализацию всех переменных к началу...
     
  4. IrineK

    IrineK Гость

    1) Нельзя в main() задать len=0, т.к. это - желательная длина (80).
    2) char *s[N] - массив указателей - маразм
    3) Нельзя в Space(...) определить dif,ins,ins_last прежде, чем будут посчитаны n и k.

    Учитывая ваши возможности, держите готовое.

    Код (C++):
    #include <stdio.h>
    #define N 80
    void Space (char s [80], int len)
    {
    int n=0; //фактическая длина строки
    int k=0; //количество пробелов
    int is=0,ir=0,cur=1,j;

    char res[N];
    while(s[n]!='\0')
    {   if(s[n]==' ') k++;
    n++;
    }

    int dif = len-n-1;//разница между желаемой и фактической длиной строки
    int ins = dif/k;//к-во вставляемых пробелов между словами, кроме последнего
    int ins_last = ins+dif%k; //вставляемые пробелы перед последним словом

    while(is<n)
    {   if (s[is]==' ')
    {   if(cur<k)
    {       for(j=0;j<ins+1;j++)
    res[ir+j]=' ';
    ir+=(ins+1);
    cur++;
    }
    else
    {       for(j=0;j<ins_last+1;j++)
    res[ir+j]=' ';
    ir+=(ins_last+1);
    }
    is++;
    }
    else
    {   res[ir]=s[is];
    ir++;
    is++;
    }
    }
    res[ir]='\0';

    printf("\n");
    printf("The result:\n");
    printf("%s",res);
    printf("%81c",' ');
    }

    int main()
    {
    char str[N];
    int len=80; //желаемая длина
    printf("The line:\n");
    gets_s(str);
    Space(str,len);
    }
    Лучше ничего больше не трогать.
     
Загрузка...
Похожие Темы - написание функции на
  1. wellsun
    Ответов:
    0
    Просмотров:
    129
  2. vladis222
    Ответов:
    1
    Просмотров:
    627
  3. smailvolf
    Ответов:
    1
    Просмотров:
    1.037
  4. faissullin
    Ответов:
    0
    Просмотров:
    1.090
  5. IseLL
    Ответов:
    1
    Просмотров:
    998

Поделиться этой страницей