fork download
  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. void separate(int charNum, const char *input, char *mess1, char *mess2);
  6.  
  7. int main(void)
  8. {
  9. char message[100] = "01234567891011121314";
  10. char mess1[100];
  11. char mess2[100];
  12.  
  13. separate(7, message, mess1, mess2);
  14. printf("mess1=%s, mess2=%s\n", mess1, mess2);
  15.  
  16. separate(20, message, mess1, mess2);
  17. printf("mess1=%s, mess2=%s\n", mess1, mess2);
  18.  
  19. separate(30, message, mess1, mess2);
  20. printf("mess1=%s, mess2=%s\n", mess1, mess2);
  21.  
  22.  
  23. return 0;
  24. }
  25.  
  26. // 全角文字の間を分割したら文字化けするのでしないように全角文字も1文字と見なします
  27. void separate(int charNum, const char *input, char *mess1, char *mess2)
  28. {
  29. int charCount = 0;
  30. int byteNum = 0;
  31. unsigned char *check_doublebyte = (unsigned char *)input;
  32.  
  33. while (charCount < charNum){
  34. // 全角第1バイトかどうか判定(SHIFT-JIS)
  35. if ((check_doublebyte[byteNum] >= 0x81 && check_doublebyte[byteNum] <= 0x9e) ||
  36. (check_doublebyte[byteNum] >= 0xe0 && check_doublebyte[byteNum] <= 0xef)){
  37.  
  38. if (input[byteNum + 1] == '\0'){
  39. byteNum++;
  40. break;
  41. }
  42. else{
  43. byteNum += 2;
  44. }
  45. }
  46. else{
  47. byteNum++;
  48. }
  49.  
  50. if (input[byteNum] == '\0'){
  51. byteNum--;
  52. }
  53.  
  54. charCount++;
  55. }
  56.  
  57. strcpy(mess1, input);
  58. strcpy(mess2, input);
  59.  
  60. mess1[byteNum + 1] = '\0';
  61. mess2[0] = mess2[byteNum + 1];
  62. }
  63.  
Success #stdin #stdout 0s 2252KB
stdin
Standard input is empty
stdout
mess1=01234567, mess2=81234567891011121314
mess1=01234567891011121314, mess2=
mess1=01234567891011121314, mess2=