フリーソフト

文字列の処理

[VC++] 標準入力に入力されたパスワードを隠す方法

http://ja.softuses.com/188813

-------------------------
#include<iostream>
#include<string>
#include<conio.h>

int main()
{
  std::string password;
  char ch;
  const char ENTER = 13;

  std::cout << "enter the password: ";
  while ((ch = _getch()) != ENTER) {
    password += ch;
    std::cout << '*';
  }
}
-------------------------

[C++Builder] AnsiStringでコードページを指定する

C++Builder 2009ではAnsiStringでコードページが指定できます。

typedef AnsiStringT<932> SJISString;

[BCB] 書式付き文字列関数、 FormatのBCB版

AnsiString __cdecl FormatEx(const char *format, ...)
{
  va_list args;

  va_start(args,format);

  AnsiString Buf="";
  Buf.vprintf(format,args);
  va_end(args);

  return Buf;
}

使い方は、

AnsiString Str=FormatEx("%sは%dです",buffer,i);

[BCB] 文字が数字かどうか調べる

bool __fastcall IsNumeric(char c)
{
 return ((c>='0') && (c<='9'));
}

[Delphi] ひらがなとカタカナを変換

//ひらがなからカタカナ
function TForm1.HiraToKata(Str : String) : String;
var
 Buf:array [0 .. 1023] of Char;
begin
 LCMapString(GetUserDefaultLCID, LCMAP_KATAKANA, PChar(Str), Length(Str)+1, Buf, 1024);
 Result:=String(Buf);
end;

//カタカナからひらがな
function TForm1.KataToHira(Str : String) : String;
var
 Buf:array [0 .. 1023] of Char;
begin
 LCMapString(GetUserDefaultLCID, LCMAP_HIRAGANA, PChar(Str), Length(Str)+1, Buf, 1024);
 Result:=String(Buf);
end;

[Delphi] 半角と全角を変換する

//半角から全角
function TForm1.HanToZen(Str : String) : String;
var
 Buf:array [0 .. 1023] of Char;
begin
 LCMapString(GetUserDefaultLCID, LCMAP_FULLWIDTH, PChar(Str), Length(Str)+1, Buf, 1024);
 Result:=String(Buf);
end;

//全角から半角
function TForm1.ZenToHan(Str : String) : String;
var
 Buf:array [0 .. 1023] of Char;
begin
 LCMapString(GetUserDefaultLCID, LCMAP_HALFWIDTH, PChar(Str), Length(Str)+1, Buf, 1024);
 Result:=String(Buf);
end;

[Delphi] 文字が全角か半角か調べる

//'ああああ'の3バイト目を調べる例
case ByteType('ああああ',3) of
 mbSingleByte: Lable1.Caption:='半角です';
 mbLeadByte: Lable1.Caption:='全角の1バイト目です';
 mbTrailByte: Label1.Caption:='全角の2バイト目です';
end;

全角1バイト目の文字集合であるLeadBytesを利用する方法もあります。

Str:='aああ';
if (Str[3] in LeadBytes) then Label1.Caption:='全角の1バイト目です';

[Delphi] 文字列を表示するのに必要な幅や高さが知りたい

CanvasのTextWidthメソッドを使うと、その文字列を表示するために必要な幅がわかります。同じようにCanvasのTextHeightメソッドで表示するのに必要な高さがわかります。

TextWidth:=Form1.Canvas.TextWidth('aaaああああ');
TextHeight:=Form1.Canvas.TextHeight('aaaああああ');