Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.07;
Скачать: CL | DM;

Вниз

Вопрос по С   Найти похожие ветки 

 
saNat ©   (2004-10-19 01:17) [0]

Доброго времени суток.
Задача: выровнять первый абзац (заголовок) по центру, а остальной текст - по ширине. Делаю так: загружаю файл в Memo, определяю максимальную длину строки в пикселях, добавляю пробелы по мере необходимости между словами. Вопрос в том, что нужно найти конец абзаца. Как я помню, в С строка заканчивается нулевым символом. А как его считать?. Т.е. понятно, что нужно читать посимвольно Lines->Strings[i][j]. А как сам "\0" увидеть.

С уважением...


 
jack128 ©   (2004-10-19 03:25) [1]

saNat ©   (19.10.04 1:17)
Как я помню, в С строка заканчивается нулевым символом

в дельфи тоже (если имется в виду длинная строка)

saNat ©   (19.10.04 1:17)
А как его считать?.

что значить считать?? На какой он позиции?? Ну раз строка им заканчивается, то очевидно на Length(s) (отчет от нуля)
saNat ©   (19.10.04 1:17)
А как сам "\0" увидеть.
никак. это непечатный символ.

> Вопрос в том, что нужно найти конец абзаца

это вообще не имеет никакого отнашения к нулевому символу.


 
080D:07BBh ©   (2004-10-19 06:37) [2]

посмотри в описании
        \t - табуляция(то же самое что tab жать)
        \n - перенос строки
        \r - возврат коретки


 
saNat ©   (2004-10-19 08:14) [3]

В плане я под вечер снова затупил - нужно искать 13?


 
saNat ©   (2004-10-19 08:14) [4]

...ну в С - \n


 
080D:07BBh ©   (2004-10-19 10:56) [5]

нет надо искать
if(x = "\n") printf("вот оно ");


 
080D:07BBh ©   (2004-10-19 10:57) [6]

нет надо искать
if(x == "\n") printf("вот оно ");


 
saNat ©   (2004-10-19 12:22) [7]

Ну не получается...

int LinesCount=0;
while (LinesCount<TextEdit->Lines->Count)
{
 int SymbolNumber=1;
 while (SymbolNumber<=TextEdit->Lines->Strings[LinesCount].Length())
  {
   if (TextEdit->Lines->Strings[LinesCount][SymbolNumber]=="\n")
    {
     ShowMessage("Enter");
    }
   SymbolNumber++;
  };
 LinesCount++;
}


... не работает


 
saNat ©   (2004-10-19 14:35) [8]

Что делать и как быть?


 
saNat ©   (2004-10-19 22:59) [9]

Мастера, выручайте пожалуйста... Просто программу нужно отдать завтра к 8 утра, а я откровенно заблудился.
Задачу "куска" можно поставить так. Из файла загружаю в TMemo текст. Нужно первый абзац сделать заголовком - выровнять по середине, а остальные выравнять по ширине. С выравниванием проблем нет. Нужно выделить абзацы. Да, я знаю, что признаке в языке С - "\n". Как его достать?. Можно рабочий кусок кода. Впервые так горю.

С уважением...


 
saNat ©   (2004-10-20 00:05) [10]

Разберем на примере:
Пусть это MyMemo

-----------------------
|От топота копыт пыль |
|по полю летит        |
|Мама мыла раму       |
|                     |
----------------------
Итак, первый абзац "от топота копыт пыль по полю летит". Так как ширины Мемо не хватило, то он разбил абзац на две строки. Второй абзац "Мама мыла раму" является третьей строкой.

Что я делал:

int LineNumber=0;
while (LineNumber<MyMemo->Lines->Count)
 {
  int ThisSymbol=1;
  while (ThisSymbol<=MyMemo->Lines->Strings[LineNumber].Length())
   {
    if (MyMemo->Lines->Strings[LineNumber][ThisSymbol]=="\n")
     {
      ShowMessage("Абзац");
     }
    ThisSymbol++;
   }
  LineNumber++;
 }


Ни одного срабатывания по "\n" нету


 
wnew ©   (2004-10-20 00:51) [11]

saNat ©   (20.10.04 0:05) [10]
А ты попробуй вместо "\n" вставить любой другой символ, думаю - тоже не будет срабатываний.
Попытайся записать так if char((MyMemo->Lines->Strings[LineNumber][ThisSymbol])=="\n")


 
saNat ©   (2004-10-20 00:55) [12]

to wnew: проверил. Поставил вместо "\n" "а". Сработало как положено. Сделал рекомендованную Вами конструкцию. Без изменений: "\n" - не работает, "а" - работает


 
wnew ©   (2004-10-20 01:04) [13]

Ну тогда, коли не хочет работать, как в нормальном Си  с "\n" - то, раз уж у тебя C++ Builder, попробуй, как в Pascal, т.е. Delphi :) - #13;


 
wnew ©   (2004-10-20 01:08) [14]

В Open Watcom без проблем находит "\n";

void main(void)
{
 char x[20];

 strcpy(x,"test\ntest\n\n\n");
 cout << x;
 if (char(x[4]) == ("\n"))
   cout << "gefunden";
 else cout << "nicht gefunden";
}


 
saNat ©   (2004-10-20 06:09) [15]

Дело в том,ИМХО, что абзац разбит на строки Lines->String[i] и "\n" потерялся... фиг знает... уже утро..


 
saNat ©   (2004-10-20 06:09) [16]

Дело в том,ИМХО, что абзац разбит на строки Lines->String[i] и "\n" потерялся... фиг знает... уже утро..


 
saNat ©   (2004-10-20 06:09) [17]

Дело в том,ИМХО, что абзац разбит на строки Lines->String[i] и "\n" потерялся... фиг знает... уже утро..



Страницы: 1 вся ветка

Текущий архив: 2004.11.07;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.027 c
1-1098192906
Dr. Genius
2004-10-19 17:35
2004.11.07
Неповрежденные части файлов с диска A:


1-1098193662
Pepperok
2004-10-19 17:47
2004.11.07
Свой ScrolBar


6-1093878441
zlo_inside
2004-08-30 19:07
2004.11.07
монитор портов


4-1096654682
Ваня
2004-10-01 22:18
2004.11.07
Как определить Enabled или Disabled элемент на чужой форме?


6-1093870110
DsA
2004-08-30 16:48
2004.11.07
Как в Delphi узнать скорость соединения (Dial-Up, LAN)?