增删改查c语言编程,C语言增删改查

#include #define ERROR 0;

#define TRUE 1;

char g_szBuf[1000] = { 0 };

/*菜单显示*/

void Show()

{

system("cls");//清屏

printf("\t字符串动态管理\r\n");

printf("1.字符串增加 2.字符串删除 3.字符串修改\r\n");

printf("4.字符串查找 5.字符串统计 6.显示数据\r\n");

printf("7.碎片整理 8.退出\r\n");

printf("please close 1-7:");

}

/*字符串增加*/

char Add()

{

int i = 0;

int nIndex = 0;//大数组下标

char ch = '\0';//输入的y/n

char szMark[2] = { "|" };

char szInput[50] = { 0 };//输入数的数组

while (1)

{

printf("请输入要添加的:\r\n");

scanf("%s", szInput);

strcat(szInput, szMark);

/*printf("%s", szInput);*/

for (i = 0; i < strlen(szInput); i++)

{

g_szBuf[nIndex] = szInput[i];

nIndex++;

if (g_szBuf[nIndex] = '\0')

{

break;

}

}

printf("是否继续添加(y/n):\r\n");

scanf("%c", &ch);//先吃一个回车

scanf("%c", &ch);

if (ch != 'y')

{

break;

}

}

return 0;

}

int KMP(char *source, char *target, int *value)

{

int i = 0;

int j = 0;

while (i < strlen(source))

{

//不回溯,source走到尾

if (source[i] == target[j] && j < strlen(target))

{

i++;

j++;

}

else if (j >= strlen(target))

{

printf("找到...");

system("pause");

return TRUE;

}

else if (source[i] != target[j])

{

if (j == 0)

{

j = 0;

i++;

}

else

{

j = value[j - 1];

}

}

}

if (i >= strlen(source) && j >= strlen(target))

{

printf("未找到...");

system("pause");

}

/*else printf("未找到...");*/

return ERROR;

}

void ShowData();

/*字符串查找*/

int Search()

{

int i = 0;

int j = 0;

int nParameter = 0;

int nIndex = 0;//新数组的下标

char szTemp[] = { 0 };//接受返回值

char szInput[15] = { 0 };//输入的数组

char szSearch[30] = { 0 };//存放标志位以前数的新数组

ShowData();

printf("请输入你要查找的:");

scanf("%30s", szInput);

/*scanf("%s", szInput);*/

/*遍历大数组*/

for (i = 0; i < strlen(g_szBuf); i++)

{

if (g_szBuf[i] == '|')

{

if (KMP(szSearch, szInput, nParameter))

{

}

else

{

printf("未找到\r\n");

}

}

else

{

/*把杠之前的数给大数组*/

szSearch[nIndex] = g_szBuf[i];

nIndex++;

}

}

system("pause");

}

void ShowData();

void Fifure();

/*字符串删除*/

int Del()

{

int i = 0;

int j = 0;

int y = 0;

int nIndex = 0;//下标数组的新数组下标

int nCount = 0;//计数器

int nInputOrd = 0;//输入的序号

char szIndex[20] = { 0 };//放下标的数组

char szDelete[20] = { 0 };//放新数组的下标的少许值,做判断的

ShowData();

printf("请输入你要删除的编号:\r\n");

scanf("%d", &nInputOrd);

/*遍历大数组*/

for (; i < strlen(g_szBuf); i++)

{

if (g_szBuf[i] == '|')

{

szIndex[nIndex] = i;//当等于杠的时候,把杠对应的下标存到数组里面

nCount++; //计数器++

nIndex++; //新数组下标++

/*如果我们输入的数等于计数器的时候,先跳出循环*/

if (nInputOrd == nCount)

{

break;

}

}

}

/*跳出循环后,根据编号来删除相对应的数据*/

for (j = 0; j < strlen(szIndex); j++)

{

/*让输入的编号和count值对比*/

if (nInputOrd - 1 == j)

{

int k = 0;

szDelete[k] = szIndex[j - 1];

szDelete[++k] = szIndex[j];

break;

}

}

/*遍历大数组*/

for (int n = 0; n < strlen(g_szBuf); n++)

{

if (n > szDelete[0] && n < szDelete[1])

{

g_szBuf[n] = '0';

}

}

printf("删除成功!\r\n");

Fifure();

system("pause");

}

void ShowData();

void Fifure();

/*字符串修改*/

void Mod()

{

int i = 0;

int j = 0;

int nIndex = 0;//下标数组的新数组下标

int nCount = 0;//计数器

int nInputOrd = 0;//输入的序号

char szIndex[20] = { 0 };//放下标的数组

char szDelete[20] = { 0 };//放新数组的下标的少许值,做判断的

char ch = '\0';

ShowData();

printf("请输入你要修改的数据:\r\n");

scanf("%d", &nInputOrd);

/*遍历大数组*/

for (; i < strlen(g_szBuf); i++)

{

if (g_szBuf[i] == '|')

{

szIndex[nIndex] = i;//当等于杠的时候,把杠对应的下标存到数组里面

nCount++; //计数器++

nIndex++; //新数组下标++

/*如果我们输入的数等于计数器的时候,先跳出循环*/

if (nInputOrd == nCount)

{

break;

}

}

}

/*跳出循环后,根据编号来删除相对应的数据*/

for (j = 0; j < strlen(szIndex); j++)

{

/*让输入的编号和count值对比*/

if (nInputOrd - 1 == j)

{

int k = 0;

szDelete[k] = szIndex[j - 1];

szDelete[++k] = szIndex[j];

break;

}

}

printf("请输入要修改的\r\n");

/*遍历大数组*/

for (int n = 0; n < strlen(g_szBuf); n++)

{

if (n > szDelete[0] && n < szDelete[1])

{

g_szBuf[n] = getch(ch);

}

}

printf("修改成功!\r\n");

system("pause");

}

/*寻找分隔符*/

int FindSpace(char ch)

{

int i = 0;

char szSpace[] = { '\r', '\n', ' ', ',', '.','|' };

for (i = 0; i < sizeof(szSpace); i++)

{

if (szSpace[i] == ch)

{

return 1;

}

}

return 0;

}

void Fifure();

void ShowData();

/*字符串统计*/

void Statis()

{

int i = 0;

int j = 0;

int k = 0;

int isSpace = 1;

int isWord = 0;

int nCount = 0;

int nCount2 = 0;

printf("去除'|'的存储的字符串总数据为:\r\n");

for (; i < strlen(g_szBuf); i++)

{

/*因为加了竖杠,这里需要排除竖杠输出*/

if (g_szBuf[i] != '|')

{

printf("%c", g_szBuf[i]);

}

}

printf("\r\n");

printf("没去除'|'的存储字符串总数据为:\r\n");

printf("%s\r\n", g_szBuf);

for (; j < strlen(g_szBuf); j++)

{

if (isSpace && !FindSpace(g_szBuf[j]))

{

isWord = 1;

isSpace = 0;

}

if (isWord && FindSpace(g_szBuf[j]))

{

isWord = 0;

isSpace = 1;

nCount++;

}

}

printf("分隔符出现了%d次\r\n", nCount);

/* printf("比例为%f\r\n", (float)(nCount/sizeof(ary)));*/

ShowData();

printf("\r\n");

system("pause");

}

void Fifure();

/*显示数据*/

void ShowData()

{

int i = 0;

int y = 0;

int nFlag = 1;

int nIndex = 1;

printf("输入的数据总共为:\r\n");

for (i = 0; i < strlen(g_szBuf); i++)

{

/*因为加了竖杠,这里做个判断*/

if (g_szBuf[i] != '|')

{

if (nFlag) //标志位,做序号

{

printf("%d.", nIndex);

nFlag = 0;

}

printf("%c", g_szBuf[i]);

}

else

{

nIndex++;

printf("\r\n");

nFlag = 1;

}

}

printf("\r\n");

Fifure();

system("pause");

}

/*分布情况*/

void Fifure()

{

int y = 0;

for (y = 0; y < sizeof(g_szBuf); y++)

{

if (g_szBuf[y] == '|' || g_szBuf[y] == '\0' || g_szBuf[y] == '0')

{

printf("○");

}

else

{

printf("●");

}

}

}

/*碎片整理*/

void Finish()

{

int i = 0;

int j = 0;

int nCount = 0;//竖杠个数

int nDelLength = 0;//删除的长度

int nIndex = 0;

char szIndex[30] = { 0 };

int isDel = 0;//标志是否有删除

for (; i < sizeof(g_szBuf); i++)

{

if (g_szBuf[i] == '|')

{

nCount++;

isDel = 0;

}

if (nCount == 1 && g_szBuf[i] == '|')

{

nDelLength = 0;

}

nDelLength++;

if (g_szBuf[i] != '0' && g_szBuf[i] != '|')

{

isDel = 1;

}

if (nCount == 2 && isDel == 0)

{

nCount = 0;

printf("整理成功\r\n");

for (j = i; j < (sizeof(g_szBuf)-(i + 1)); j++)

{

g_szBuf[j - (nDelLength - 2)] = g_szBuf[j + 1];

}

}

}

system("pause");

}

/*主函数*/

int main()

{

int nInput = 0;

Show();

scanf("%d", &nInput);

while (1)

{

switch (nInput)

{

case 1:

Add();

break;

case 2:

Del();

break;

case 3:

Mod();

break;

case 4:

Search();

break;

case 5:

Statis();

break;

case 6:

ShowData();

break;

case 7:

Finish();

break;

case 8:

break;

default:

break;

}

system("cls");

Show();

scanf("%d", &nInput);

}

return 0;

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值