[随手写一个] 字符串实现
来源:互联网 发布:淘宝网怎么开企业店铺 编辑:程序博客网 时间:2024/06/06 19:06
明天CET4了,随便写点啥压压惊好了。
// File: heap_string.h#ifndef __HEADER__HEAP_STRING_H#define __HEADER__HEAP_STRING_Htypedef struct hstring_t { char *data; int length; int size;} *hstring_t;hstring_t hs_create();void hs_destory(hstring_t str);void hs_assign(hstring_t str, const char *st);void hs_resize(hstring_t str, int ref);const char *hs_get(hstring_t str);int hs_length(hstring_t str);const char hs_at(hstring_t str, int idx);const char hs_at_unsafe(hstring_t str, int idx);void hs_append_string(hstring_t str, const char *s);void hs_append_character(hstring_t str, char ch);void hs_append_integer(hstring_t str, long x);#define hs_append(str, x) _Generic((x), char *: hs_append_string, \ int : hs_append_character, \ char : hs_append_character, \ long : hs_append_integer) (str, x)#endif // __HEADER__HEAP_STRING_H// File: heap_string.c#include "heap_string.h"#include<string.h>#include<stdlib.h>hstring_t hs_create(){ hstring_t ret = (hstring_t)malloc(sizeof(hstring_t)); ret->length = 0; ret->size = 10; ret->data = (char *)malloc(ret->size * sizeof(char)); return ret;}void hs_destory(hstring_t str){ free(str->data); free(str);}void hs_assign(hstring_t str, const char *st){ int new_length = strlen(st); if (new_length < str->length) { hs_resize(str, new_length); } strcpy(str->data, st); str->length = new_length;}const char *hs_get(hstring_t str){ return str->data;}int hs_length(hstring_t str){ return str->length;}const char hs_at(hstring_t str, int idx){ if (idx < str->length) { return str->data[idx]; } return '\0';}const char hs_at_unsafe(hstring_t str, int idx){ return str->data[idx];}void hs_resize(hstring_t str, int ref){ static const int MIDVALUE = 1000; int new_size = str->size; while (new_size < ref) { new_size *= (str->size < MIDVALUE) ? 1.5 : 2; } char *new_buffer = (char *)malloc(new_size * sizeof(char)); strcpy(new_buffer, str->data); free(str->data); str->data = new_buffer; str->size = new_size;}void hs_append_string(hstring_t str, const char *s){ int new_length = str->length + strlen(s); if (new_length > str->size) { hs_resize(str, new_length); } strcpy(str->data + str->length, s); str->length = new_length;}void hs_append_character(hstring_t str, char ch){ int new_length = str->length + sizeof(ch); if (new_length > str->size) { hs_resize(str, new_length); } str->data[str->length] = ch; str->data[str->length + 1] = '\0'; str->length++;}void hs_append_integer(hstring_t str, long x){ char buffer[25]; sprintf(buffer, "%ld", x); hs_append_string(str, buffer);}// File: test.c#include"heap_string.h"#include<stdio.h>int main(int argc, char *argv[]){ hstring_t str = hs_create(); hs_assign(str, "Hello"); hs_append(str, ','); hs_append(str, "world."); hs_append(str, 1001010101L); puts(hs_get(str)); hs_destory(str);}
阅读全文
0 0
- [随手写一个] 字符串实现
- 随手写
- 写一个函数,实现字符串的复制
- 突然要用到BCD码,就随手写了一个。
- singleton-----------学习单件时,随手写了一个单件类程序
- 随手写了一个简单的socket服务端和客户端
- 学习VC多线程时随手写的一个小例子
- 随手写了一个鸡肋的二叉树
- C语言 写函数实现把一个字符串倒序
- 【C语言】写一个函数,实现字符串内单词逆序
- 写一个函数替代strrev()--实现字符串翻转
- java语言实现:写一个函数,使字符串倒序
- OpenGl实现一个简单的随手画功能
- 实现一个随手指移动而滑动的效果---爬坑
- 写一函数,实现两个字符串的比较,即自己写一个strcmp函数
- P279_1017 写一函数,实现两个字符串的比较,即自己写一个strcmp函数
- 写一个字符串分割程序,
- 自己写一个字符串类
- Javascript原生插件开发
- 创建GitHub技术博客
- mnist_autoencoders
- centos下安装pip时失败
- ecilpse配置jvm内存大小
- [随手写一个] 字符串实现
- IDEA注册
- 记一次RegionServer节点的宕机事故[hbase1.1.2]
- 如何刷爆wordpress的数据库
- java二分法查找
- Spark升级到2.0后测试stream-kafka测试报java.lang.NoClassDefFoundError: org/apache/spark/Logging错误
- 剑指offer—整数中1的个数
- 06-图2 Saving James Bond
- 构造函数