awk:文字列から文字を1つずつ抽出します。

awk:文字列から文字を1つずつ抽出します。

文字列の先頭から最後まで文字を1つずつ抽出するとき、誰かがこのように書くことがよくあります。

たとえば、

function rev1(str,    i, ret) {
    for (i = 1; i <= length(str); i++) {
        ret = substr(str, i, 1) ret;
    }
    return ret;
}

length() を使う必要はないと思います。

function rev2(str,    ch, i, ret) {
    while (ch = substr(str, ++i, 1)) {
        ret = ch ret;
    }
    return ret;
}

うまくいきますが、間違っていますか?

ベストアンサー1

間違っているわけではありませんが(入力が実際に配列ではなく文字列であると仮定している場合)、substr()は文字列を返すため、文字列比較を実行する条件に依存するため、結果コードはあまり明確ではありません。一見すると、文字列にaが含まれていると失敗することがわかりましたが、0強制的に文字列比較をするので失敗しません。

おすすめ記事