字符串的应用
来源:互联网 发布:幸运星 山本宽 知乎 编辑:程序博客网 时间:2024/06/15 20:36
对解决非数值的问题,主要设计到的操作对象是字符串,简称串。
对串的存储可以又两种处理方式:一种是将串定义成字符型数组,串的存储空间分配在编译是完成,不能更改,这种方式称为串的静态存储结构; 另外一种是串的存储空间在程序运行时动态分配,这种方式称为串的动态存储结构。
串的链式存储结构是包含数据域和指针域的节点结构。其中数据域用来存储字符,指针域存储指向下一个节点的指针,这样的一个串可以用一个单链表来表示。
用单链表存放字符串,若每个节点仅放一个字符,则每个节点的指针域所栈存储空间比数据域所占存储空间要大的多。为了节省空间,可使每个节点存放若干个字符,这称职位块链结构。显然块链结构的存储密度高于一个节点存储一个字符的链表结构。通常,串的链式存储结构多采用块链结构。具体例子如下(对每行数据进行操作):
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
#define DATA_MAX 80
typedef struct node
{
char Data[DATA_MAX];
struct node *next;
}nodetype;
typedef struct head
{
int num;
int len;
nodetype *next;
}headtype;
headtype Head[MAX];
void Initial();
int MenuSelect();
void EnterData();
void DeleteLine();
void List();
void ClearBuffer();
int main()
{
char choice;
Initial();
while(1)
{
choice = MenuSelect();
switch(choice)
{
case 1:
EnterData();
break;
case 2:
DeleteLine();
break;
case 3:
List();
break;
case 4:
exit(0);
default:
exit(1);
}
}
}
void ClearBuffer()
{
while(getchar()!= '/n');
}
void Initial()
{
int i;
for(i = 0; i<MAX; i++)
{
Head[i].len = 0;
}
}
int MenuSelect()
{
int i = 0;
printf(" 1: Enter/n");
printf(" 2: Delete/n");
printf(" 3: List/n");
printf(" 4: Exit/n");
while(i<= 0 || i> 4)
{
printf(" 请输入菜单选择号...../n ");
scanf("%d",&i);
ClearBuffer();
}
return i;
}
void EnterData()
{
nodetype *p;
int i,j,m,LineNumber,k;
char StrBuffer[MAX];
while(1)
{
printf(" 输入数据要插入的行号(0~~100): 输入其他的号码退出/n ");
scanf("%d",&LineNumber);
ClearBuffer();
if(LineNumber< 0 || LineNumber> MAX)
{
printf(" 退出............./n/n");
return;
}
i = LineNumber;
Head[i].num = LineNumber;
Head[i].next = ( nodetype *)malloc( sizeof( nodetype));
p = Head[i].next;
m = 1;
j = -1;
StrBuffer[0] = 0;
k = 0;
do
{
j++;
if(!StrBuffer[k])
{
scanf("%s",StrBuffer);
k = 0;
}
if(j>= DATA_MAX*m)
{
m++;
p->next = (nodetype *)malloc( sizeof( nodetype));
p = p->next;
}
p->Data[j%DATA_MAX] = StrBuffer[k++];
}while(p->Data[j%DATA_MAX] != '@');
Head[i].len = j;
}
}
void DeleteLine()
{
nodetype *p,*q;
int i,j,m,LineNumber;
while(1)
{
printf(" 输入数据要删除的行号(0~~100):/n ");
scanf("%d",&LineNumber);
if(LineNumber< 0 || LineNumber> MAX)
{
return;
}
i = LineNumber;
p = Head[i].next;
m = 0;
if(Head[i].len> 0)
{
m = (Head[i].len-1)/DATA_MAX + 1;
}
for(j = 0; j<m; j++)
{
q = p->next;
free(p);
p = q;
}
Head[i].len = 0;
Head[i].num = 0;
}
}
void List()
{
nodetype *p;
int i,j,m;
for(i = 0; i<MAX; i++)
{
if(Head[i].len> 0)
{
printf(" 第%d行有数据,他们是:/n ",Head[i].num);
m = 1;
p = Head[i].next;
printf("/n");
for(j = 0; j< Head[i].len; j++)
{
if(j>= DATA_MAX*m)
{
p = p->next;
m++;
}
else
{
printf(" %c",p->Data[j%DATA_MAX]);
}
}
printf("/n");
}
}
printf("/n");
}
- 字符串的应用
- 字符串数组的应用
- 字符串排列组合的应用
- 字符串的各种应用
- 字符串的应用1
- 字符串的应用2
- 字符串的应用
- 字符串的应用
- 字符串的应用
- String字符串的应用
- 字符串的简单应用
- 字符串的属性应用
- 字符串的应用举例
- <字符串的应用>
- 字符串中单引号的应用
- NSString字符串的实际应用
- 学习转义字符串的应用
- Oracle 字符串相关的应用
- CodeIgniter 入门
- Windows DDK中经典的宏——CONTAINING_RECORD
- 编程大师论道:PHP的魅力和不足何
- 重装了JBUILDER,以前能运行的系统又不行了的问题及解决
- httpclient 登录 post
- 字符串的应用
- Workstation(lanmanworkstation)服务启动慢的解决方法
- 令世界目瞪口呆的"中国超级工程一览"
- gridview 排序时候显示箭头
- 红旗Linux+Oracle10g
- Solaris2.4 多线程编程指南1--线程基础
- 微软新数据库向Oracle宣战
- 输入框动态判断数据库中是否有重复(根据企业名称)
- 在C#中利用自动化模型操纵Word