封装一个字符数组,实现增加,删除,替换,打印,搜索等功能
来源:互联网 发布:电梯编程视频教程 编辑:程序博客网 时间:2024/05/17 07:44
字符数组.h
#include<stdio.h>
#include<stdlib.h>
struct CharArry
{
char *p;
int len;
int reallen;
int SortState;//0无序 1从a到z 2从z到a
};
void InitArry(struct CharArry *data);//初始化数组
void AddItem(struct CharArry *data, char item);//添加数据
void PrintArry(struct CharArry *data);//打印数组
char *SearchItem(struct CharArry *data, char item);//搜索
void DeleteItem(struct CharArry *data, char item);//删除一个元素
void ExchangeItem(struct CharArry *data, char olditem, char newitem);//替换数据
void DeleteSameItem(struct CharArry *data, char item);//删除所有相同的item
char* FindItem(struct CharArry *data, char item);//查询数组里的第一个item
字符数组库.c
#include "字符数组.h"
void InitArry(struct CharArry *data)
{
data->p =NULL;
data->len = 0;
data->reallen = 0;
data->SortState = 0;//无序
}
void AddItem(struct CharArry *data, char item)
{
if (data->p == NULL)
{
data->p = (char *)malloc(1);
data->len += 1;
data->reallen += 1;
data->p[data->len - 1] = item;
return;
}
if (data->len == data->reallen)
{
data->p = (char *)realloc(data->p, (data->len + 1)*sizeof(char));
data->len += 1;
data->reallen += 1;
data->p[data->len - 1] = item;
}
else
{
data->len += 1;
data->p[data->len - 1] = item;
}
}
void PrintArry(struct CharArry *data)
{
if (data->p == NULL)
{
printf("空数组,无需打印");
return;
}
for (int i = 0; i < data->len; i++)
{
printf("%c\t", data->p[i]);
}
}
char* FindItem(struct CharArry *data, char item)
{
if (data->p == NULL)
{
printf("没有数据,无需搜索");
return NULL;
}
for (int i = 0; i < data->len; i++)
{
if (data->p[i] == item)
{
return data->p + i;
}
}
return NULL;
}
char *SearchItem(struct CharArry *data, char item)
{
if (data->p == NULL)
{
printf("没有数据,无需搜索");
return NULL;
}
if (data->SortState == 0)
{
for (int i = 0; i < data->len; i++)
{
if (data->p[i] == item)
{
return data->p + i;
}
}
}
if (data->SortState == 1)
{
int low, high;
low = 0;
high = data->len - 1;
while (low <= high)
{
int mid;
if (data->p[low] ==data->p[high])
mid = low;
else
{
mid = (low + high) / 2;
}
if (data->p[mid] == item)
return data->p + mid;
else if (data->p[mid] > item)
{
high = mid - 1;
}
else if (data->p[mid] > item)
{
low = mid + 1;
}
}
return NULL;
}
if (data->SortState == 2)
{
int low, high;
low = 0;
high = data->len - 1;
while (low <= high)
{
int mid;
if (data->p[low] == data->p[high])
{
mid = low;
if (data->p[mid] == item)
return data->p + mid;
}
else
{
mid = (low + high) / 2;
}
if (data->p[mid] == item)
return data->p + mid;
else if (data->p[mid] > item)
{
low = mid + 1;
}
else if (data->p[mid] > item)
{
high = mid - 1;
}
}
return NULL;
}
}
void DeleteItem(struct CharArry *data, char item)
{
if (data->p == NULL)
{
printf("没有数据,无需删除");
return;
}
char *pt = SearchItem(data, item);
if (pt == NULL)
{
printf("没有找到,无需删除");
}
else
{
int curr = pt - data->p;
for (int i = curr; i < data->len - 1; i++)
{
data->p[i] = data->p[i + 1];
}
data->len -= 1;
}
}
void ExchangeItem(struct CharArry *data, char olditem, char newitem)
{
char *pt = SearchItem(data, olditem);
if (pt == NULL)
{
printf("没有找到要替换的数据");
return;
}
*pt = newitem;
}
void DeleteSameItem(struct CharArry *data, char item)
{
char *pt = FindItem(data, item);
if (pt == NULL)
{
printf("没有找到要替换的数据");
return;
}
for (pt = FindItem(data, item); pt != NULL; pt = FindItem(data, item))
{
int curr = pt - data->p;
for (int i = curr; i < data->len - 1; i++)
{
data->p[i] = data->p[i + 1];
}
data->len -= 1;
}
}
main.c
#include<stdio.h>
#include<stdlib.h>
#include "字符数组.h"
void main()
{
struct CharArry mydata;
InitArry(&mydata);
char ch;
for (ch = 'a'; ch <= 'z'; ch++)
{
AddItem(&mydata, ch);
}
PrintArry(&mydata);
DeleteItem(&mydata, 'f');
printf("\n删除之后\n");
PrintArry(&mydata);
ExchangeItem(&mydata, 'a', 'k');
printf("\n替换之后\n");
PrintArry(&mydata);
ExchangeItem(&mydata, 'd', 'k');
ExchangeItem(&mydata, 'o', 'k');
printf("\n\n");
PrintArry(&mydata);
printf("\n删掉k之后\n");
DeleteSameItem(&mydata, 'k');
printf("\n\n");
PrintArry(&mydata);
getchar();
}
- 封装一个字符数组,实现增加,删除,替换,打印,搜索等功能
- 字符数组封装实现添加,删除,插入,修改,搜索,打印
- 单链表的游标实现:插入、删除、查找、打印等功能
- 封装一个搜索的功能
- java 使用正则Pattern等实现【搜索 -> 提取 -> 分割 -> 替换】功能
- java 使用正则Pattern等实现【搜索 -> 提取 -> 分割 -> 替换】功能
- 字符串替换空格:请实现一个函数,把字符数组中的每个空格替换成“%20”。
- 字符串替换空格:请实现一个函数,把字符数组中的每个空格替换成“%20”
- 字符串替换空格:请实现一个函数,把字符数组中的每个空格替换成“%20”。
- 一个iOS图片选择器的DEMO(实现图片添加,宫格排列,图片长按删除,以及图片替换等功能)
- 读取txt文件实现搜索替换功能
- angular做的一个表单带删除排序,搜索等功能
- 日常联系:一个C++程序完成链表的增加结点、删除结点、打印、查询、逆序等操作
- 用c语言实现 一个通讯录(实现 增加、删除、查找、修改、显示、清空功能)
- javascript的数组元素,为Array增加两个函数,实现删除功能
- jqgrid 实现增加,删除,修改的功能
- FMDB增加修改删除功能的实现
- 使用sigmaGrid实现分页、打印等功能
- 反射:动态执行一个对象的方法
- [JIRA] 最新Linux版本 jira6.3.6安装汉化破解以及数据迁移
- 交通灯管理系统学习
- 数据结构 第一章 《思维导图》
- C++运算符重载讲解与经典实例(转自千里冰封网友)
- 封装一个字符数组,实现增加,删除,替换,打印,搜索等功能
- 自动登录
- Spark1.1.0 Transformations
- 设计模式-建造者模式给用户自由
- 《数据结构》 实验1
- Spark1.1.0 Actions
- 输入框弹出的时候内容上移动
- 绑定类修改
- k-means