• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы baha
  • Дата начала
B

baha

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

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

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

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
 
B

baha

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

Код:
/***************************************************************/
/***********************Файл 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);
}

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

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);
}

Лучше ничего больше не трогать.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!