Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Выравнивание строки

Автор: Jaxx 12.04.2007 15:24

Задание:
Разработать функцию, которая выполняет следующую обработку символьной строки: выровнять строку по левому краю до заданной длины. Запрещается пользоваться стандартными функциями библиотек С.
Или я сегодня сильно туплю, или причина в кривых руках, но не выходит ничего...

Код

int main()
{

char str1[80];
char str2[80];
int i;
int arr1[80];
int arr2[80];
int otstup;


i=0;
otstup=0;
cout << "VVedite stroku: " << "\n";
cin >> str1;


for (i=0; i<80; i++)
{
  arr1[i]=str1[i];
  }

cout <<"\n";

cout << "Vvedite otstup: ";
cin >> otstup;


for (i=0; i<otstup; i++)
{
  arr2[i]=' ';
  }

for (i=otstup; i<80; i++)
{
  arr2[i]=arr1[i-otstup];
  }

for (i=0; i<80; i++)
{
  str2[i]=arr2[i];
  }

cout << ("\n");
cout << ("\n");

cout << str2;

return 0;

}


Автор: volvo 12.04.2007 15:44

Ты вот о таком:

#include <iostream.h>

int main()
{

char str1[80];
char str2[80];
int arr1[80];
int arr2[80];

int i = 0, otstup = 0;
cout << "VVedite stroku: " << "\n";

cin.getline(str1, 80);
for(i = 0; i < 80; i++) {
arr1[i] = str1[i];
}

cout << "\n";
cout << "Vvedite otstup: ";
cin >> otstup;

for(i = 0; i < otstup; i++) {
arr2[i] = ' ';
}
for(; i < 80; i++) {
arr2[i] = arr1[i - otstup];
}

for(i = 0; i < 80; i++) {
str2[i]=arr2[i];
}

cout << ("\n");
cout << ("\n");

cout << str2;
return 0;

}


?

Автор: Jaxx 12.04.2007 15:58

Так... Концепция изменилась... Согласен, затупил. Все гораздо проще, и без всяких наворотов ))



int main()
{

char str1[80];
int i;
int otstup;


i=0;
otstup=0;
cout << "VVedite stroku: ";
cin >> str1;

cout <<"\n";

cout << "Vvedite otstup: " << "\n";
cin >> otstup;

for (i=0; i<otstup; i++)
{
cout << " ";
}

cout << str1;


return 0;
}




Вот только одна проблема: почему строка выводится только до первого пробела?
И еще - как найти длину введенной строки, чтобы поставить проверку количества отступов?

Автор: volvo 12.04.2007 16:21

Ты обратил внимание, КАК я вводил строку? Зачем вообще спрашивать, если на ответы не обращаешь внимания, и второй раз - на те же грабли?

То, что она у тебя выводится до первого пробела, происходит потому, что оператор ">>" вводит строку до первого пробела, а чтобы прочесть всю строку надо использовать getline

Автор: Jaxx 12.04.2007 17:17

Ну хорошо, это понял. А что с проверкой отступов? Есть функция strlen, но стандартными функциями мне нельзя пользоваться. Как сделать, чтобы строка не разрывалась