Cè¨èªã§æååãç°¡åã«ãã¤å°ãé«éã«æä½ãã
Cè¨èªã§ã¯æååãé£çµãã¦ããã¨ãã¡ã¢ãªã®å確ä¿ã¨ãããªãã¦ã¯ãªããªãã®ã§ã¨ã¦ãé¢åã§ãã
ããã«ãstrcatãå©ç¨ããã¨ã
以ä¸ã®ããã«æååé£çµãããå ´åã
strcat(str1, str2);
char *strcat(char *s1, const char *s2) { int len = strlen(s1); strcpy(s1 + len, s2); return s1; }
ã¨ãªã£ã¦ãã(ã¯ã)ãããé£çµãè¡ã度ã«ç·å½¢æ¢ç´¢ã«ããæåæ°ã«ã¦ã³ããè¡ãããããã£ã¦ãé£çµãè¡ãæä½ãå¤ãã¨å¦çé度ã大å¹
ã«ä½ä¸ãããç¹ã«ãªã¼ãã¼ãO(n)ã«ãªããããs1ã®æåæ°ãå¤ããªãã¨ããã©ã¼ãã³ã¹ã¯ææªã ã
ããã§ã常ã«æåæ°ãä¿æãã¦ãããã¨ã§strlenãçããã¨ãã§ããé£çµã®ã³ã¹ããæãããã¨ãã§ããã®ã ã
ã½ã¼ã¹
MyString.h
#ifndef __MY_STRING_H__ #define __MY_STRING_H__ #include <stdlib.h> #include <string.h> #define STRING_ALLOC_SIZE (1024) typedef unsigned int unichar; typedef struct MyString { char *str; size_t length; size_t buff_length; } MyString; MyString *new_string(); void free_string(MyString *mstr); size_t my_strlen(MyString *mstr); void resize_string(MyString *mstr, size_t size); char *my_strcat(MyString *mstr, const char *str); char *my_strncat(MyString *mstr, const char *str, size_t n); char *my_chrcat(MyString *mstr, const char c); char *my_strcat2str(MyString *mstr, const char *str, const char *end_str); char *my_strcat2chr(MyString *mstr, const char *str, const char endc); char *my_strcat2ptr(MyString *mstr, const char *str, const char *endp); #endif
MyString.c
#include "MyString.h" MyString *new_string() { MyString *mstr = (MyString *)malloc(sizeof(MyString)); mstr->str = (char *)malloc(STRING_ALLOC_SIZE); mstr->str[0] = '\0'; mstr->length = 0; mstr->buff_length = STRING_ALLOC_SIZE; return mstr; } void free_string(MyString *mstr) { if (mstr) { free(mstr->str); free(mstr); } } size_t my_strlen(MyString *mstr) { return mstr->length; } void resize_string(MyString *mstr, size_t size) { if (size > mstr->buff_length) { mstr->buff_length = (size / STRING_ALLOC_SIZE + 1) * STRING_ALLOC_SIZE * 2; mstr->str = (char *)realloc(mstr->str, mstr->buff_length); } } char *my_strcat(MyString *mstr, const char *str) { size_t len = mstr->length + strlen(str); resize_string(mstr, len + 1); strcpy(mstr->str + mstr->length, str); mstr->length = len; return mstr->str; } char *my_strncat(MyString *mstr, const char *str, size_t n) { size_t len = mstr->length + n; resize_string(mstr, len + 1); strncpy(mstr->str + mstr->length, str, n); mstr->length = len; return mstr->str; } char *my_chrcat(MyString *mstr, const char c) { resize_string(mstr, mstr->length + 2); mstr->str[mstr->length++] = c; mstr->str[mstr->length] = '\0'; return mstr->str; } char *my_strcat2str(MyString *mstr, const char *str, const char *end_str) { char *end = strstr(str, end_str); if (end != NULL) { // end += strlen(end_str); return my_strcat2ptr(mstr, str, end); } return (char *)mstr->str; } char *my_strcat2chr(MyString *mstr, const char *str, const char endc) { char *end = strchr(str, endc); if (end != NULL) { // end++; return my_strcat2ptr(mstr, str, end); } return (char *)mstr->str; } char *my_strcat2ptr(MyString *mstr, const char *str, const char *endp) { size_t cat_len = endp - str - 1; if (cat_len > 0) { my_strncat(mstr, str, cat_len); } return (char *)mstr->str; }
使ãæ¹
é¢æ°å | ç¨é | å¼æ° |
---|---|---|
MyString *new_string() | MyStringãä½æ | ãªã |
void free_string(MyString *mstr) | MyStringã®è§£æ¾ | 解æ¾ããMyString |
size_t my_strlen(MyString *mstr) | MyStringã®æåé· | æåé·ãã«ã¦ã³ãããMyString |
char *my_strcat(MyString *mstr, const char *str) | æååã®é£çµ | mstr:MyString str:é£çµããæåå |
char *my_strncat(MyString *mstr, const char *str, size_t n) | næåé£çµ | n:é£çµããæåæ° |
char *my_chrcat(MyString *mstr, const char c) | 1æåé£çµ | cé£çµããæå |
char *my_strcat2str(MyString *mstr, const char *str, const char *end_str) | æå®æåååã¾ã§é£çµ | end_str:æå®æåå |
char *my_strcat2chr(MyString *mstr, const char *str, const char endc) | æå®æååã¾ã§é£çµ | endc:æå®æå |
char *my_strcat2ptr(MyString *mstr, const char *str, const char *endp) | æå®ãã¤ã³ã¿åã¾ã§é£çµ | endp:æå®ãã¤ã³ã¿ |
â»åé£çµé¢æ°ã¯char*ãè¿ãããã«ãªã£ã¦ãããé£çµå¾ã®æååã®å
é ãã¤ã³ã¿ãè¿ãã¦ããã
â»æååã®é£çµã§ç¢ºä¿ãã¦ããã¡ã¢ãªãã大ãããªãå ´åã¯ãåçã«ã¡ã¢ãªã®å確ä¿ãè¡ã£ã¦ãããããã¡ã¢ãªã®å¤§ãããæ°ã«ããå¿
è¦ãç¡ãã
â»å
é¨çã«æååã®é·ããè¨ç®ãã¦ãããããå¤é¨ã§æååãæä½ãããã¨ã¯æã¾ãããªãï¼
使ç¨ä¾
#include <stdio.h> #include "MyString.h" int main(int argc, char **argv) { MyString *str = new_string(); printf("str = %s\n", my_strcat(str, "test")); printf("str = %s\n", my_strncat(str, "1234567890", 4)); printf("str = %s\n", my_chrcat(str, ':')); printf("str = %s\n", my_strcat2str(str, "abcd<br />", "<br />")); printf("str = %s\n", my_strcat2chr(str, "wxyz<br />", '<')); free_string(str); return 0; }
åºå
str = test str = test1234 str = test1234: str = test1234:abc str = test1234:abcwxy
ã¾ã¨ã
æ¬æ¥ãªããæ¢åã®é£çµã¨æ¯è¼ãé度åä¸çãç®åºãã¹ãã§ãããä»æ¥ã®ã¨ããã¯åå¼ããã
JSONã®ãã¼ãµãä½ã£ãæã«å©ç¨ããããæ¬ã½ã¼ã¹ãå©ç¨ãããã¨ã§æ ¼æ®µã«å¦çé度ãä¸ãã£ãã
JSONãã¼ãµãå¾ã»ã©ç´¹ä»ãã¾ãã