Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2009, 13:10   #1
Frame1992
Пользователь
 
Аватар для Frame1992
 
Регистрация: 21.09.2009
Сообщений: 31
Стрелка Строки в C++

Привет всем. Как всегда без помощи других не обойтись. Задача заключается в следующем. В прогу вводится строка. Нужно правый край этой строки выровнять(ну чтоб типа строка, как в Ворде, была выровняна по ширине). За счет изменения групп пробелов внутри строки надо добиться того, чтобы строка имела заданную длину, а пробелы в конце строки отсутсвовали. Количество пробелов располагающихся внутри строки, должо отличаться не более чем на один. Вот что я уже написал:
Код:
#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
{
clrscr();
char s[100];
int kol, dl, i, kp, raz, a;          
dl=78;                                         
printf("\nVvedi stroku\n");     
gets(s);                                      
kol=strlen(s);

i=1;
kp=0;
    do
    {
    if(s[i]==' ')
    kp++;
    i++;
    }
    while (i<kol);


i=0;
raz=dl-kol;
a=raz/kp;
	do
	{if(s[i]==' ')
	s[i]='  ';
	i++;
	a--;
        }
	while(a>0);
printf("%c", s);
}
где kol - введеное количество символов
dl - ширина экрана, по которому происходит выравнивание
kp - количество пробелов, которое нужно добавить в строку для выравнивания
Frame1992 вне форума Ответить с цитированием
Старый 03.12.2009, 13:53   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

интересная задача.
Предлагаю вычислять желаемую длину-длину строки/ кол-во пробелов в ней.
Полученное число пробелов вставлять в строку там где пробелы:
Код:
#include <stdio.h>
#include <iostream.h>
//---------------------------------------------------------------------------

#pragma argsused
int main()
{
 char s[]="Hello World its me";
 int p=0,k,i=30,l=i-strlen(s);
 //Кол-во пробелов
 for(k=0;k<strlen(s);k++)
  p+=(s[k]==' ')?1:0;
 p=l/p;
 for(k=0;k<strlen(s);k++){
  if(s[k]!=' '){cout<<s[k];}
  else{
   for(i=0;i<p;i++){cout<<' ';}
  }
 }
 // выводим
 cout<<'\n';
 system("pause");
	return 0;
}
//---------------------------------------------------------------------------
Понятен смысл?
I'm learning to live...

Последний раз редактировалось Stilet; 03.12.2009 в 13:58.
Stilet вне форума Ответить с цитированием
Старый 03.12.2009, 21:27   #3
Frame1992
Пользователь
 
Аватар для Frame1992
 
Регистрация: 21.09.2009
Сообщений: 31
По умолчанию

Не совсем понятен смысл. К тому же мне надо бы мою программу доработрать...Подскажите как сделать?
Frame1992 вне форума Ответить с цитированием
Старый 05.12.2009, 08:25   #4
Frame1992
Пользователь
 
Аватар для Frame1992
 
Регистрация: 21.09.2009
Сообщений: 31
По умолчанию

Ну че, никак значит?
Frame1992 вне форума Ответить с цитированием
Старый 07.12.2009, 00:08   #5
Frame1992
Пользователь
 
Аватар для Frame1992
 
Регистрация: 21.09.2009
Сообщений: 31
По умолчанию

Ну ребяята!!!Прогу в Четверг сдаватЬ!!
Frame1992 вне форума Ответить с цитированием
Старый 09.12.2009, 22:40   #6
Frame1992
Пользователь
 
Аватар для Frame1992
 
Регистрация: 21.09.2009
Сообщений: 31
По умолчанию

Есть вариант работы программы...Как можно его доработать??

Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
void main()
{
int i,i1,j,j1,n;
float pr;
char c,z[1000],z1[1000];
pr=0;

printf("\nВведи строку\n");
for(i=0;;i++)
{                                 //vvod
scanf("%c",&c);z[i+1]=0;
if (c==10) break;
if (c==' ') pr++;
z[i]=c;
}

for(j=0;j<=strlen(z);j++)
for(i=j;(z[i]==' ')&((z[i+1]==' ')|(z[i+1]==0));i--)	//iskluchenie probelov
{j--;
pr--;
for(i1=i;i1<=strlen(z);i1++)
z[i1]=z[i1+1];

}
z[i+1]=0;

j=i+1;

printf("%s; минимальная длина:%d",z,j);


printf("\nВведите нужную длину\n");scanf("%d",&n);i1=0;
for(i=0;j>=i;i++)
{
 if((n-j)==0) break;

 if((z[i]==' ')&(i!=j)&(i!=0)&z[i+1]!=' ')
	for(j1=0;j1<=((n-j)/pr);j1++)
	{
	z1[i1]=' ';
	i1++;
	}
 else
 {
  c=z[i];
  z1[i1]=c;
  i1++;
 }
}
z1[i1+1]=0;

for(i1=0;strlen(z1)<n-1;i1++)
if ((z1[i1]==' ')&(z1[i1+1]!=' '))
{
for(i=strlen(z1);i>=i1;i--)
z1[i+1]=z1[i];
i1++;
}
z1[strlen(z1)+1]=0;

if ((n-j)==0) printf("\n%s\n",z); else printf("\n%s\n",z1);

getch();
}

Последний раз редактировалось Frame1992; 09.12.2009 в 22:44.
Frame1992 вне форума Ответить с цитированием
Старый 09.12.2009, 23:02   #7
Megan
 
Аватар для Megan
 
Регистрация: 26.08.2009
Сообщений: 7
По умолчанию

Ну ты намудрил...
У меня есть примерное решение задачи... там правда 1 блок не реализован и она начинается так же как твоя в 1ом сообщении... Запарюсь писать...
Вообще я могу дать тебе готовую задачу 19 варианта если хочешь )
Megan вне форума Ответить с цитированием
Старый 12.12.2009, 20:26   #8
Frame1992
Пользователь
 
Аватар для Frame1992
 
Регистрация: 21.09.2009
Сообщений: 31
По умолчанию

Ток есть одна загвоздка. Препод не принимает прогу ввиду того, что мне нужно растянуть текст а не строку. Препод не прав?
Frame1992 вне форума Ответить с цитированием
Старый 12.12.2009, 20:29   #9
osichev
Форумчанин
 
Регистрация: 18.05.2009
Сообщений: 180
По умолчанию

да,тебе надо текст!!
Программист без пива, как спирт без пробки - выдохнется___________-
osichev вне форума Ответить с цитированием
Старый 12.12.2009, 20:40   #10
osichev
Форумчанин
 
Регистрация: 18.05.2009
Сообщений: 180
По умолчанию

в принципе программа правильная.но тебе надо,чтобы после точки не было пробела.
Программист без пива, как спирт без пробки - выдохнется___________-
osichev вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенести символа с начала строки в место перед запятой этой же строки. Zhiltsov Microsoft Office Excel 4 05.06.2009 13:10
Строки Mr.Been Паскаль, Turbo Pascal, PascalABC.NET 5 11.05.2009 17:44
Строки. Как вывести часть строки? Anfall Общие вопросы Delphi 7 26.02.2009 09:10
считать из файла две строки, вывести на экран символы первой строки, которые отсутствуют во второй gotex Помощь студентам 4 08.05.2008 02:27
как вывести строку поочередно сначала первая буква первой строки потом первая буква второй строки и т.д. vitalik007 Помощь студентам 1 25.09.2007 20:45