数据结构 行编辑

该博客介绍了一个使用C语言编写的简单文本编辑器。编辑器支持基本操作,如字符输入、删除和清除。它利用栈的数据结构来处理用户输入,并在遇到特定字符(如'#'和'@')时执行相应的操作。该编辑器能够处理溢出和空栈的情况,并能输出输入字符的逆序顺序。

#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100   
typedef struct{
    int *base;
     int *top;
     int stacksize;
}SqStack;
int IsEmpty(SqStack *S)
{
    return S->top==S->base;
}
void InitStack(SqStack *S){
      S->base=(int *)malloc(STACK_INIT_SIZE *sizeof(int));
      if(!S->base) exit(1);
      S->top=S->base;
      S->stacksize=STACK_INIT_SIZE;
      }
int IsFull(SqStack *S)
{
 return S->top-S->base==STACK_INIT_SIZE-1;
}
void Push(SqStack *S,int e){
     if (IsFull(S))
 {
  printf("栈上溢");
  //exit(1);
 }
  *S->top++ =e;
}

int Pop(SqStack *S){

 if(IsEmpty(S))
 {
  printf("栈为空");
  //exit(1);
 }
 return *--S->top;
}
int Top(SqStack *S)
{              
 if(IsEmpty(S))
 {
  printf("栈为空");
  //exit(1);
 }
 return *(S->top-1);
}
void ClearStack(SqStack *S){
    S->top=S->base; //S->base=S->top;底不动
    }
int StackLength(SqStack S){
    int i;
   for(i=0;S.base<S.top;--S.top)i++;
    return i;
    }
void LineEdit(SqStack *S){
    int a[100],n,i;
    char ch;
    ch=getchar();
    while(ch!='\n')
    {
     //i++;非输入字符参与计数 自己编写求栈长度函数!!
       switch(ch)
      {
       case '#':Pop(S);break;//删除输入的一个元素
       case '@':ClearStack(S);break;//不能够丢!! 删除前面的所有元素
       default:Push(S,ch);break;
      }
      ch= getchar();
     }
     i=StackLength(*S);  //printf("%d\n",i);测试
   for(n=1;n<=i;n++)
    {
   a[n]=Pop(S);  //Top(S);多余
   }  
     for(n=i;n>=1;n--)
     printf("%c",a[n]);
}                                  
int main(int argc, char *argv[])
{ SqStack *ST;
  ST=(SqStack *)malloc(100*sizeof(SqStack));  //指针必须分配空间!!
  printf("please input:\n");
  InitStack(ST);
  LineEdit(ST);
  system("PAUSE"); 
  return 0;
}

#include #include #include #include #define MAX_LENGTH 4000 int ParseString(const char *parse_str, int *letter_num, int *space_num, int *total_num, const char *stat_str, int *str_num); int main(int argc, char **argv) { int letter_num, space_num, total_num, str_num; const char *stat_str = "abc "; char input_str[MAX_LENGTH]; char parse_str[MAX_LENGTH]; FILE *fd = NULL; fd = fopen( "data.txt ", "wb+ "); //err while ( 1 ) { fgets(input_str, MAX_LENGTH, stdin); //err if ( *input_str == '# ' ) break; fwrite(input_str, 1, strlen(input_str)-1, fd); //err *input_str = '\r '; *(input_str+1) = '\n '; fwrite(input_str, 1, 2, fd); //err } fseek(fd, 0, SEEK_SET); //err memset(parse_str, 0, MAX_LENGTH); fread(parse_str, 1, MAX_LENGTH, fd); //err fclose(fd); ParseString(parse_str, &letter_num, &space_num, &total_num, stat_str, &str_num); printf( "parse result : letter-%d, space-%d, total size-%d, num of '%s '-%d\n ", letter_num, space_num, total_num, stat_str, str_num); return 0; } int ParseString(const char *parse_str, int *letter_num, int *space_num, int *total_num, const char *stat_str, int *str_num) { int tmp_letter=0, tmp_space=0, tmp_total=0, tmp_str=0; char *p, *q; for ( p=parse_str; *p!=0; p++ ) { if ( isalpha(*p) != 0 ) tmp_letter++; //if ( isspace(*p) != 0 ) if ( *p == ' ' ) tmp_space++; } for ( p=parse_str; *p!=0; p++ ) { q = strstr(p, stat_str); if ( q != NULL ) { tmp_str++; p = q + strlen(stat_str); } else { break; } } *letter_num = tmp_letter; *space_num = tmp_space; *total_num = strlen(parse_str); *str_num = tmp_str; return 0; }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

免费范文

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值