challenge 文字列の反転

与えられた文字列sを前後逆転したものを返す関数reverse_stringを作成してください。 ただし、sはShift-JISでエンコードされている文字列だと仮定して構いません。

サンプル入出力

>>> print reverse_string("Hello")
olleH
>>> print reverse_string("こんにちは")
はちにんこ
>>> print reverse_string("濁点(だくてん)")
)んてくだ(点濁

Posted feedbacks - C


	
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <string.h>

int main()
{
    int  i, j, len;
    unsigned char in[BUFSIZ];
    unsigned char out[BUFSIZ];

    scanf("%s", in);
    len = strlen(in);

    j = len - 1;
    i = 0;

    while (i < len) {
        /* Shift-JISか判定 */
        if ((in[i] >= 0x80 && in[i] <= 0x9F) ||
            (in[i] >= 0xE0 && in[i] <= 0xFF)) {
            out[j-1] = in[i++];
            out[j] = in[i++];
            j--;
        }
        else {
            out[j] = in[i++];
        }
        j--;
    }
    out[len] = '\0';

    printf("%s\n", out);
}


	
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <string.h>

void swap(char *str, int i, int j)
{
    char tmp = str[i];
    str[i] = str[j];
    str[j] = tmp;
}

char *reverse_string(char *str)
{
    int len, i, j;

    len = strlen(str);

    for (i = 0, j = len-1; j > i; ++i, --j) {
        swap(str, i, j);
    }

    for (i = len-1; i > 0; --i) {
        if (str[i] & 0x80) {
            swap(str, i, i-1);
            --i;
        }
    }

    return str;
}

Index

Feed

Other

Link

Pathtraq

loading...