文字列(文字)を繰り返す方法を教えてほしいです。
(例)
・Ruby: "hoge" * 3
・Perl: "hoge" x 3
・VB: String$(3, "a") ※文字列を繰り返す方法はなし
「ない」ことも知りたいので、簡単な方法がなければ
それを教えてもらえるだけでもうれしいです。
また、「演算子や関数はないけど、こう書けば簡単にできる」とかも
教えてもらえるともっとうれしいです。
何の言語でもいいのですが、特に知りたい言語は
C, C++, C#、Java, Python, PHP, JavaScript, Haskel, Lisp..
などです。マニアックな言語も大歓迎です。
よろしくお願いします。
http://q.hatena.ne.jp/1195018503
JavaScript で。
Ruby などのように組込みメソッドはないけど。
String.prototype.repeat = function(n) {
return Array(n+1).join(this);
}
"Hoge".repeat(3) => HogeHogeHoge
ちょうどJAVAを勉強中なのでベタベタですが・・・・
String string ="";
for (int i = 0; i < 3; i++) {
string = string.concat("hoge");
}
C/C++ には、標準では無いと思います。
(C++ には、文字列ではなく文字を繰り返すメンバ関数ならありますが。)
C++ の場合、Boost ライブラリーを使うと下記のように簡単に書けます。
#include <boost/preprocessor/repetition/repeat.hpp> #include <iostream> #define STR_REPEAT_MACRO(z, n, s) s #define STR_REPEAT(s, n) BOOST_PP_REPEAT(n, STR_REPEAT_MACRO, s) int main() { std::cout << STR_REPEAT("hoge", 3) << "\n"; }
ただし、上記はリテラル限定です。
C# で:
string hoge3 = new String(' ', 3).Replace(" ", "hoge");
ちょっとトリッキーですが。
Smalltalk
String new: 3 withAll: $a ※文字列を繰り返す方法はなし
文字列を繰り返すには、
(1 to: 3) inject: '' into: [:str :idx | str, 'hoge']
とか
String streamContents: [:ss | 3 timesRepeat: [ss nextPutAll: 'hoge']]
とか(後者は Squeak Smalltalk のみ)。
コメント(1件)
ずいぶん集まってとても満足です。
まとめてお礼申し上げます。