[C][C++][Perl][Pascal] String Format

특정 자료형 int,double 등을 문자열의 형태로 만드는 작업은 많이 사용되는 작업이다.

C언어sprintf 라는 함수를 사용하며 사용법은 아래와 같다.

#include<stdio.h>    //sprintf
#include<stdlib.h>   //EXIT_SUCCESS
int main(){  
    int a=5;
    int b=6;
    char buf[256];
    sprintf(buf,"a : %d,b : %d",a,b);
    puts(buf);
    return EXIT_SUCCESS;
}

printf와 동일하게 사용할 수 있다.


C++ 언어는 stringstream 이라는 클래스가 존재한다.

인터페이스 역시 C에서는 printf와 같듯이, C++cout 과 같다.

#include<iostream>    //cout,endl;
#include<sstream>    //stringstream
int main() {  
    int a = 6;
    int b = 7;
    std::stringstream oss;
    oss << "a : " << a << ", b : " << b;
    std::cout << oss.str() << std::endl;
    return 0;
}

stringstream::str()이 std::string을 반환하므로, 원한다면 string::c_str()을 바로 꺼내어 쓸수도 있다!!

다만! stringstream ss;을 초기화 할려면 반드시 ss.str(""); 으로 초기화를 해주어야 한다.

ss.clear() , ss.str().clear로는 초기화가 되지 않는다.


PerlC의 영향을 강하게 받아서 sprintf 함수가 존재한다.

차이점은 결과 문자열이, 첫번째 인수가 아닌 반환값으로 주어진다는 점!.

#!/usr/bin/perl
use strict;  
use warnings;  
use feature 'say';  
my $a=5;  
my $b=6;  
my $s=sprintf("a : %d,b : %d",$a,$b);  
say $s;  

Pascal 언어는 뭐 정보찾기가 Lisp 뺨치지만, 그나마 알골계언어라 감으로 익혀가는 중이다.

파스칼역시 좋은 스트링패러다임을 가지고 있다. 이런 포맷 출력은 I/O 함수와 사용법이 같아야 좋다.

writestr 함수로 사용 가능하며, built-in 함수이다.

program sprintf;  
var  
  s:string;
  a,b:longint;
begin  
  a:=4;
  b:=5;
  writestr(s,'a : ',a,',b : ',b);
  writeln(s);
end.  

언제부터인가 주로 하는 언어들이 이 4가지가 되었다.....