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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.04.2009, 10:14   #1
Deceased
Пользователь
 
Аватар для Deceased
 
Регистрация: 13.12.2007
Сообщений: 44
По умолчанию как превести string в char ?

Добрый день, прошу помогите решить проблему.

есть стринговая переменная, содержит всего одну букву.
и есть переменная типа char, значение которой нужно присвоить из стринговой переменной.
значения для чаровых переменных присваиваются в кавычках, как я понимаю, типа:
с:='a';
логично было бы предположить, что что бы добиться сего результата надо просто в стринговую переменную добавить кавычки:
b:=#39'a'#39
c:=b;
но в этом случае, результат будет отличным от случая, если бы мы просто задали напрямую так:
c:='a'; это показывает ord(c). В случае непосредственного присвоения оrd(c) выдаст 97, а в случае через стринговую переменную он будет выдавать вообще непонятные числа..


p.s. гуголь и поиск толком ничего не дали..

Последний раз редактировалось Deceased; 30.04.2009 в 10:15. Причина: 1
Deceased вне форума Ответить с цитированием
Старый 30.04.2009, 10:26   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Банально:
Код:
if length(s)>=1 then c:=s[1];
где S - Стринг c - Char
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.04.2009, 10:44   #3
Deceased
Пользователь
 
Аватар для Deceased
 
Регистрация: 13.12.2007
Сообщений: 44
По умолчанию

классно, работает, спасибо..
однако я не понимаю, почему тогда если мы просто сделаем C:=S; то он выдаст ошибку несовместимы типы чар и стринг, а в этом случае - понимает?
Deceased вне форума Ответить с цитированием
Старый 30.04.2009, 11:07   #4
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

string это маассив чаров
размер char 1 байт а размер string 255 байт потому и нельзя присвоить чару полное значение стринга. можно только итый элемент
SERG1980 вне форума Ответить с цитированием
Старый 30.04.2009, 11:12   #5
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Цитата:
string 255 байт
у динамического массива нет статичной длинны )
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 30.04.2009, 11:15   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

одно но string в Дельфи не ограничен 255 байтами...а он может быть до 2 гб длиной
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 30.04.2009, 14:36   #7
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
одно но string в Дельфи не ограничен 255 байтами...а он может быть до 2 гб длиной
а почему тогда, когда я пытаюсь записать в переменную типа String более 255 символов он на меня ругается, а?
SlavaSH вне форума Ответить с цитированием
Старый 30.04.2009, 14:36   #8
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Цитата:
как превести string в char ?
Так:
Код:
function strtoPchar(s:string):Pchar;
begin
  S := S+#0;
  result:=StrPCopy(@S[1], S) ;
end;

или 
pch:=PChar(str);
str:=String(pch);
Так:
Код:
function StringToPWide(sStr: string; var iNewSize: integer): PWideChar;
var
  pw: PWideChar;
  iSize: integer;
begin
  iSize := Length(sStr) + 1;
  iNewSize := iSize * 2;

  pw := AllocMem(iNewSize);

  MultiByteToWideChar(CP_ACP, 0, PChar(sStr), iSize, pw, iNewSize);

  Result := pw;
end;

Пример использования: 
procedure TForm1.Button1Click(Sender: TObject);
var
  iSize: integer;
begin
  ChangeWallpaper(StringToPWide('C:\1.jpg', iSize));
end;

function PWideToString(pw: PWideChar): string;
var
  p: PChar;
  iLen: integer;
begin
  iLen := lstrlenw(pw) + 1;
  GetMem(p, iLen);

  WideCharToMultiByte(CP_ACP, 0, pw, iLen, p, iLen * 2, nil, nil);

  Result := p;
  FreeMem(p, iLen);
end;
Или так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  s: array [0..99] of char;
  p: integer;
begin
  s := 'Delphi World';
  FindWindow(nil, s);
  p := pos('lp', s);
  Form1.Caption := copy(s, p, Length(s) - p);
end;
Вариантов много
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 30.04.2009, 15:45   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
artemavd
Накрутил...
Цитата:
а почему тогда, когда я пытаюсь записать в переменную типа String более 255 символов он на меня ругается, а?
А смотря что ты в коде написал.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.04.2009, 16:55   #10
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Цитата:
Сообщение от SlavaSH Посмотреть сообщение
а почему тогда, когда я пытаюсь записать в переменную типа String более 255 символов он на меня ругается, а?
А пишете небось так:
Код:
var s:string;
....
s:='......';
читайте внимательней: string- динамический массив с длинной по умолчанию в 256 элементов
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
String и Char Volt Общие вопросы Delphi 3 17.02.2009 08:30
String и char Julinja Паскаль, Turbo Pascal, PascalABC.NET 9 03.01.2009 12:10
как сделать из string char biolog Паскаль, Turbo Pascal, PascalABC.NET 9 28.05.2008 10:19
из string в char ShenDy Общие вопросы C/C++ 1 14.04.2008 11:01
char->string eds Общие вопросы .NET 1 28.11.2007 17:22