代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
C
】
分割式子
作者:
CodeFarmer_Q
/ 发布于
2015/6/29
/
765
?#include <stdio.h> #include <string.h> #include <stdlib.h> struct _string { char* content; struct _string* next; }; typedef struct _string string; typedef int type_t; #define def_digit 0 #define def_sign 1 #define def_start 2 #define def_end 3 string* spilt(char* func); void print(string* head); void delete(string* head); string* makeNodeS(char* src,int position,string* old); string* makeNodeD(char* src,int start,int end,string* old); type_t check(char c); int main() { char* str="@121+2+(2+5)-3/4*5#"; string* funcHead=spilt(str); print(funcHead); delete(funcHead); return 0; } //转化为链表 string* spilt(char* func) { string* head=NULL;//记录表头 string* link=NULL;//链表实体 int start,end; int len=strlen(func); for(start=0,end=0;end<len;) { //检查当前字符 switch(check(func[end])) { //如果字符是数字,则什么都不做 case def_digit: end++; break; //如果字符是开始标识符,则记录链表头 case def_start: link=makeNodeS(func,end,link); head=link; start=end+1; end++; break; //如果字符是结束标识符,则制作最后两个节点,返回链表头 case def_end: makeNodeD(func,start,end,link); makeNodeS(func,end,link); return head; //如果字符是其他,则制作数字和字符两个节点 default: link=makeNodeD(func,start,end,link); start=end+1; link=makeNodeS(func,end,link); end++; break; } } } string* makeNode() { string* new = (string*)malloc(sizeof(string)); new->content=NULL; new->next=NULL; return new; } //初始化符号节点 string* makeNodeS(char* src,int position,string* old) { //创建一个未初始化的新节点 string* new =makeNode(); //构建一个分割字符串 char* str=(char*)malloc(sizeof(char)*2); str[0]=src[position]; str[1]='\0'; //初始化节点 new->content=str; new->next=NULL; if(old!=NULL) { //构建链表 old->next=new; } return new; } //初始化数字节点 string* makeNodeD(char* src,int start,int end,string* old) { if(start>=end) { return old; } else { //创建一个未初始化的新节点 string* new =makeNode(); //构建一个分割字符串 int len=end-start+1; char* str=(char*)malloc(sizeof(char)*len); str[len-1]='\0'; strncpy(str,src+start,end-start); //初始化节点 new->content=str; new->next=NULL; //构建链表 old->next=new; return new; } } //查看字符的类型 type_t check(char c) { //判断数字 static const char* digit="0123456789"; int len=strlen(digit); for(int i=0;i<len;i++) { if(digit[i]==c) { return def_digit; } } //判断开始或结束标识符 switch(c) { case '@': return def_start; case '#': return def_end; default: return def_sign; } } void print(string* head) { string* curr=NULL; for(curr=head;curr!=NULL;curr=curr->next) { printf("%s ",curr->content); } } void delete(string* head) { string* holder=head; string* deleter=holder; while(deleter!=NULL) { holder=holder->next; //释放内存 free(deleter->content); free(deleter); deleter=holder; } }
试试其它关键字
分割式子
同语言下
.
获取手机通讯录 iOS去除数字以外的所有字符
.
异步加载音乐等资源
.
交通罚单管理系统
.
freemark实现,简单的替换
.
计算斐波那契数列
.
base64解码 包括解码长度
.
图像显示
.
冒泡排序
.
输入十进制数,输出指定进制
.
链式栈
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
CodeFarmer_Q
贡献的其它代码
(
7
)
.
分割式子
.
unity灰度图shader
.
实现发送邮件
.
查找系统盘中需要找的字符
.
计算文件大小
.
直线和矩形是否相交
.
文件夹常用操作
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3