#include #include #include typedef struct { char*(*copy)(const char*,char*,size_t); char*(*allSplicedTogether)(const char**,char*,size_t,size_t); char*(*push)(char*,char*,size_t); size_t(*indexOf)(const char*,const char*); size_t(*getLength)(const char*); } String_; /** * value:你需要复制的字符串 * result:复制结果 * max_length:result的预期最大长度(含'\0') * 如果max_length不够长,会只复制一部分 */ static char* copy(const char* value,char*result,size_t max_length){ if(value == NULL||result == NULL) return NULL; size_t i = 0; while(i < max_length-1){ result[i] = value[i]; i++; if(value[i] == '\0'){ result[i] = '\0'; break; } } return result; } /** * value:你需要拼接的字符串数组 * result:拼接结果 * result_max_length:result的预期最大长度(含'\0') * value_count:value的元素数量 * 如果result_max_length不够长,会只复制一部分 * value_count如果太长,会出现意外 * 如果字符串数组中存在NULL,则会跳过该元素进行拼接 */ static char* allSplicedTogether(const char** value,char* result,size_t result_max_length,size_t value_count){ if(value == NULL||result == NULL) return NULL; size_t length = 0; for(size_t i = 0;i < value_count;i++){ if(value[i] == NULL)continue; for(size_t ii = 0;value[i][ii] != '\0';ii++){ if(length == result_max_length-1){ i = value_count; break; } result[length] = value[i][ii]; length++; } } result[length+1] = '\0'; return result; } /** * value:延长的字符串 * append_string:追加的字符串 * max_length:value的最大长度(含\0) */ static char* push(char* value,const char* append_string,size_t max_length){ size_t length = strlen(value); for(size_t i = 0;append_string[length+i] != '\0';i++){ if(length+i == max_length-1){ value[length+i+1] = '\0'; return value; } value[length+i] = append_string[i]; } } /** * 获取字符串长度 */ static size_t getLength(const char* value){ size_t length = 0; while(value[length] != '\0') length++; return length; } /** * value:被查找的字符串 * element:要查找的字符串片段 * 返回element第一次在value中出现的位置的索引 */ static size_t indexOf(const char* value,const char* element){ size_t index = 0; size_t satisfy = 0; size_t should_satisfy = getLength(element); while(value[index] != '\0'){ if(value[index] == element[satisfy]) satisfy++; else satisfy = 0; if(satisfy == should_satisfy) return index - satisfy + 1; index++; } return (size_t)-1; } String_ String; void createString(){ String.copy = copy; String.allSplicedTogether = allSplicedTogether; String.push = push; String.getLength = getLength; String.indexOf = indexOf; }