文章目录
一、数组操作(字符串)涉及知识:myTest01.ctest.csv
一、数组操作(字符串)
涉及知识:
1、文件io流
2、数组的动态内存分配
3、指针
4、简单的字符串操作
myTest01.c
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#define SIZE 200
int readFile(char *container
[], int size
, char *fileName
);
void freeContainer(char *container
[], int *count
);
void showData(char *container
[], int *count
);
int findSimple(char *container
[], int *count
, char *value
);
void findData(char *container
[], int *count
);
int InsertSimple(char *container
[], int size
, int *count
, int pos
, char *value
);
void InsertData(char *container
[], int size
, int *count
, char *value
);
int DeleteSimple(char *container
[], int *count
, int pos
);
void DeleteData(char *container
[], int *count
);
int upDataSimple(char *container
[], int *count
, int pos
, char *value
);
void UpData(char *container
[], int *count
, char *value
);
void opration(char *container
[], int *count
);
int main()
{
int count
;
char *container
[SIZE
];
count
= readFile(container
, SIZE
, "F:\\Cworkspace\\数据结构\\第一章\\test.csv");
if (count
!= -1)
{
_flushall();
opration(container
, &count
);
freeContainer(container
, &count
);
}
return 0;
}
int readFile(char *container
[], int size
, char *fileName
)
{
int c
= 0;
char buf
[1024];
FILE
*fp
= fopen(fileName
, "r");
if (fp
== NULL)
{
printf("文件 %s 打开失败,请检查文件路径\n", fileName
);
return -1;
}
while (c
< size
&& !feof(fp
))
{
fgets(buf
, 1024, fp
);
if (buf
[strlen(buf
) - 1] == 0x00000A)
{
buf
[strlen(buf
) - 1] = '\0';
}
if (buf
[0] != '\0')
{
container
[c
] = (char *)malloc(strlen(buf
) + 1);
if (container
[c
] != NULL)
{
strcpy(container
[c
], buf
);
c
++;
}
}
}
fclose(fp
);
return c
;
}
void freeContainer(char *container
[], int *count
)
{
int j
= 0;
while (j
< *count
)
{
if (container
[j
] != NULL)
free(container
[j
]);
j
++;
}
}
void showData(char *container
[], int *count
)
{
int j
= 0;
while (j
< *count
)
{
printf("%d %s\n", (j
+ 1), container
[j
]);
j
++;
}
}
int findSimple(char *container
[], int *count
, char *value
)
{
char *p
;
int j
= 0;
while (j
< *count
)
{
p
= strstr(container
[j
], value
);
if (p
!= NULL)
{
return j
+ 1;
}
j
++;
}
return 0;
}
void findData(char *container
[], int *count
)
{
char str
[100];
int j
;
printf("输入要查找的编码:");
scanf("%s", str
);
j
= findSimple(container
, count
, str
);
if (j
> 0)
{
printf("查找成功:位置:%d 内容:%s\n", j
, container
[j
- 1]);
}
else
{
printf("查找数据失败\n");
}
}
int InsertSimple(char *container
[], int size
, int *count
, int pos
, char *value
)
{
int c
= *count
;
while (1)
{
if (c
== size
)
{
printf("容器已满,不可继续插入\n");
return 0;
}
else
{
container
[c
] = container
[c
- 1];
if (c
!= pos
- 1)
{
c
--;
}
if (c
== (pos
- 1))
{
container
[c
] = value
;
return 1;
}
}
}
}
void InsertData(char *container
[], int size
, int *count
, char *value
)
{
char str
[100];
int pos
;
int result
;
printf("请输入要插入的内容:");
scanf("%s", value
);
while (1)
{
printf("请输入要插入的行数:");
scanf("%s", str
);
pos
= atoi(str
);
if (pos
<= 0 || pos
> (*count
+ 1))
{
printf("您的输入不合法\n");
}
else
{
break;
}
}
result
= InsertSimple(container
, size
, count
, pos
, value
);
if (result
== 1)
{
printf("插入成功\n");
*count
= *count
+ 1;
}
else
{
printf("插入失败\n");
}
}
int DeleteSimple(char *container
[], int *count
, int pos
)
{
while (1)
{
if (0 == *count
)
{
printf("数据已空,无法删除");
return 0;
}
if (pos
== *count
)
{
container
[pos
- 1] = NULL;
return 1;
}
container
[pos
- 1] = container
[pos
];
pos
++;
if (pos
== *count
)
{
return 1;
}
}
}
void DeleteData(char *container
[], int *count
)
{
char str
[100];
int pos
;
int result
;
while (1)
{
printf("请输入要删除的行数:");
scanf("%s", str
);
pos
= atoi(str
);
if (pos
<= 0 || pos
> *count
)
{
printf("您的输入不合法\n");
}
else
{
break;
}
}
result
= DeleteSimple(container
, count
, pos
);
if (result
== 1)
{
printf("删除成功\n");
*count
= *count
- 1;
}
else
{
printf("删除失败\n");
}
}
int upDataSimple(char *container
[], int *count
, int pos
, char *value
)
{
if (pos
<= 0 || pos
> *count
)
{
return 0;
}
else
{
container
[pos
- 1] = value
;
return 1;
}
}
void UpData(char *container
[], int *count
, char *value
)
{
char str
[100];
int pos
;
int result
;
printf("请输入要更新的内容:");
scanf("%s", value
);
while (1)
{
printf("请输入要更新的行数:");
scanf("%s", str
);
pos
= atoi(str
);
if (pos
<= 0 || pos
> *count
)
{
printf("您的输入不合法\n");
}
else
{
break;
}
}
result
= upDataSimple(container
, count
, pos
, value
);
if (result
== 1)
{
printf("更新成功\n");
}
else
{
printf("更新失败\n");
}
}
void opration(char *container
[], int *count
)
{
_flushall();
char op
;
char value
[200][100];
int insertNum
= 0;
char updata
[200][100];
int updataNum
= 0;
printf("操作说明:\n1:显示数据\n2:查找数据\n3:插入数据\n4:删除数据\n5:更新数据\n0:退出\n");
while (1)
{
printf("请输入您的操作:");
_flushall();
op
= getchar();
if (op
== '0' || op
== '1' || op
== '2' || op
== '3' || op
== '4' || op
== '5')
{
if (op
== '0')
{
printf("退出成功\n");
return;
}
break;
}
else
{
printf("您的输入有误\n");
}
}
while (op
!= '0')
{
switch (op
)
{
case '1':
showData(container
, count
);
break;
case '2':
findData(container
, count
);
break;
case '3':
InsertData(container
, SIZE
, count
, value
[insertNum
]);
insertNum
++;
break;
case '4':
DeleteData(container
, count
);
break;
case '5':
UpData(container
, count
, updata
[updataNum
]);
updataNum
++;
break;
default:
printf("请输入合法字符\n");
break;
}
printf("请继续您的操作:");
_flushall();
op
= getchar();
if (op
== '0')
{
printf("退出成功\n");
}
}
}
test.csv
110000000,北京市
120000000,天津市
130000000,河北省
140000000,山西省
150000000,内蒙古自治区
210000000,辽宁省
220000000,吉林省
230000000,黑龙江省
310000000,上海市
320000000,江苏省
330000000,浙江省,999900000
340000000,安徽省
350000000,福建省
360000000,江西省
370000000,山东省
410000000,河南省