challenge printfの自作

printf関数を自作してください。
printfの説明は不要だと思います。とりあえずWikiPediaのリンクをはっておきます。

実際にはsprintf関数を作ってください。
注意事項
  • 標準でついているprintf系関数の使用禁止
  • 標準でついているライブラリ以外の使用禁止
  • 引数・返り値等の仕様はできるだけ似せればよい

可変長引数など、言語によっては難しい/不可能な仕様もありますが、いろいろ工夫して本物に近づくようにしてみてください。
1
2
3
4
5
6
7
#include <string.h>

// なにもフォーマットしてない
int mysprintf(char *str, const char *format, ... ){
    strcpy(str, format);
    return strlen(str);
}

Posted feedbacks - Groovy

Javaのprintf系APIは使わずに自作。%dと%sに対応。フォーマット後の文字列を返すようにしています。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
def mysprintf(fmt, Object...arglist) {
  def n = 0
  fmt.replaceAll (/%(-?[0-9]*)([sd])/) {m0,m1,m2 ->
    def value = arglist[n++].toString()
    if (m1.size() != 0) {
      def w = Integer.parseInt(m1)
      if (w < 0) {
        value = value.padRight(-w)
      }
      else if (w > 0) {
        value = value.padLeft(w)
      }
    }
    return value
  }
}

assert mysprintf("AAA%10sBBB", "abc") == "AAA       abcBBB"
assert mysprintf("AAA%-10sBBB", "abc") == "AAAabc       BBB"
assert mysprintf("AAA%10dBBB", 10) == "AAA        10BBB"
assert mysprintf("AAA%-10dBBB", 10) == "AAA10        BBB"
assert mysprintf("%s,%d", "a", 1) == "a,1"

Index

Feed

Other

Link

Pathtraq

loading...