#include <stdio.h>
#include <string.h>
void separate(int charNum, const char *input, char *mess1, char *mess2);
int main(void)
{
char message[100] = "01234567891011121314";
char mess1[100];
char mess2[100];
separate(7, message, mess1, mess2);
printf("mess1=%s, mess2=%s\n", mess1
, mess2
);
separate(20, message, mess1, mess2);
printf("mess1=%s, mess2=%s\n", mess1
, mess2
);
separate(30, message, mess1, mess2);
printf("mess1=%s, mess2=%s\n", mess1
, mess2
);
return 0;
}
// 全角文字の間を分割したら文字化けするのでしないように全角文字も1文字と見なします
void separate(int charNum, const char *input, char *mess1, char *mess2)
{
int charCount = 0;
int byteNum = 0;
unsigned char *check_doublebyte = (unsigned char *)input;
while (charCount < charNum){
// 全角第1バイトかどうか判定(SHIFT-JIS)
if ((check_doublebyte[byteNum] >= 0x81 && check_doublebyte[byteNum] <= 0x9e) ||
(check_doublebyte[byteNum] >= 0xe0 && check_doublebyte[byteNum] <= 0xef)){
if (input[byteNum + 1] == '\0'){
byteNum++;
break;
}
else{
byteNum += 2;
}
}
else{
byteNum++;
}
if (input[byteNum] == '\0'){
byteNum--;
}
charCount++;
}
mess1[byteNum + 1] = '\0';
mess2[0] = mess2[byteNum + 1];
}
CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RyaW5nLmg+Cgp2b2lkIHNlcGFyYXRlKGludCBjaGFyTnVtLCBjb25zdCBjaGFyICppbnB1dCwgY2hhciAqbWVzczEsIGNoYXIgKm1lc3MyKTsKCmludCBtYWluKHZvaWQpCnsKCWNoYXIgbWVzc2FnZVsxMDBdID0gIjAxMjM0NTY3ODkxMDExMTIxMzE0IjsKCWNoYXIgbWVzczFbMTAwXTsKCWNoYXIgbWVzczJbMTAwXTsKCglzZXBhcmF0ZSg3LCBtZXNzYWdlLCBtZXNzMSwgbWVzczIpOwoJcHJpbnRmKCJtZXNzMT0lcywgbWVzczI9JXNcbiIsIG1lc3MxLCBtZXNzMik7CgoJc2VwYXJhdGUoMjAsIG1lc3NhZ2UsIG1lc3MxLCBtZXNzMik7CglwcmludGYoIm1lc3MxPSVzLCBtZXNzMj0lc1xuIiwgbWVzczEsIG1lc3MyKTsKCglzZXBhcmF0ZSgzMCwgbWVzc2FnZSwgbWVzczEsIG1lc3MyKTsKCXByaW50ZigibWVzczE9JXMsIG1lc3MyPSVzXG4iLCBtZXNzMSwgbWVzczIpOwoKCWdldGNoYXIoKTsKCglyZXR1cm4gMDsKfQoKLy8g5YWo6KeS5paH5a2X44Gu6ZaT44KS5YiG5Ymy44GX44Gf44KJ5paH5a2X5YyW44GR44GZ44KL44Gu44Gn44GX44Gq44GE44KI44GG44Gr5YWo6KeS5paH5a2X44KCMeaWh+Wtl+OBqOimi+OBquOBl+OBvuOBmQp2b2lkIHNlcGFyYXRlKGludCBjaGFyTnVtLCBjb25zdCBjaGFyICppbnB1dCwgY2hhciAqbWVzczEsIGNoYXIgKm1lc3MyKQp7CglpbnQgY2hhckNvdW50ID0gMDsKCWludCBieXRlTnVtID0gMDsKCXVuc2lnbmVkIGNoYXIgKmNoZWNrX2RvdWJsZWJ5dGUgPSAodW5zaWduZWQgY2hhciAqKWlucHV0OwoKCXdoaWxlIChjaGFyQ291bnQgPCBjaGFyTnVtKXsKICAgICAgICAvLyDlhajop5LnrKwx44OQ44Kk44OI44GL44Gp44GG44GL5Yik5a6aKFNISUZULUpJUykKCQlpZiAoKGNoZWNrX2RvdWJsZWJ5dGVbYnl0ZU51bV0gPj0gMHg4MSAmJiBjaGVja19kb3VibGVieXRlW2J5dGVOdW1dIDw9IDB4OWUpIHx8CgkJCShjaGVja19kb3VibGVieXRlW2J5dGVOdW1dID49IDB4ZTAgJiYgY2hlY2tfZG91YmxlYnl0ZVtieXRlTnVtXSA8PSAweGVmKSl7CgoJCQlpZiAoaW5wdXRbYnl0ZU51bSArIDFdID09ICdcMCcpewoJCQkJYnl0ZU51bSsrOwoJCQkJYnJlYWs7CgkJCX0KCQkJZWxzZXsKCQkJCWJ5dGVOdW0gKz0gMjsKCQkJfQoJCX0KCQllbHNlewoJCQlieXRlTnVtKys7CgkJfQoKCQlpZiAoaW5wdXRbYnl0ZU51bV0gPT0gJ1wwJyl7CgkJCWJ5dGVOdW0tLTsKCQl9CgoJCWNoYXJDb3VudCsrOwoJfQoKCXN0cmNweShtZXNzMSwgaW5wdXQpOwoJc3RyY3B5KG1lc3MyLCBpbnB1dCk7CgoJbWVzczFbYnl0ZU51bSArIDFdID0gJ1wwJzsKCW1lc3MyWzBdID0gbWVzczJbYnl0ZU51bSArIDFdOwp9Cg==