本文目录一览:
- 1、请问一下C语言关于栈的基本应用
- 2、C语言怎样判断合法转义字符
- 3、C语言中如何判断是不是合法转义字符?
- 4、C语言 p=abc\078a\001b q=123\087\123\n 输出strlen分别为多
请问一下C语言关于栈的基本应用
#include stdlib.h
010 #include malloc.h
011 #include memory.h
012 #include assert.h
/*------------------------------------------------------------
12 // 栈结构的定义
13 ------------------------------------------------------------*/
14 typedef struct Stack
15 {
16 ElemType *base; // 栈基址
17 ElemType *top; // 栈顶
18 int stacksize; // 栈存储空间的尺寸
19 } SqStack;
20
21 /*------------------------------------------------------------
22 // 栈的基本操作
23 ------------------------------------------------------------*/
24
25 bool InitStack(SqStack *S);
26 void DestroyStack(SqStack *S);
27 bool StackEmpty(SqStack S);
28 int StackLength(SqStack S);
29 bool GetTop(SqStack S, ElemType *e);
30 void StackTraverse(SqStack S, void (*fp)(ElemType));
31 bool Push(SqStack *S, ElemType e);
32 bool Pop(SqStack *S, ElemType *e);
33 bool bracketMatch(SqStack *S,const char *arr);
const int STACK_INIT_SIZE = 100; // 初始分配的长度
016 const int STACKINCREMENT = 10; // 分配内存的增量
017
018 /*------------------------------------------------------------
019 操作目的: 初始化栈
020 初始条件: 无
021 操作结果: 构造一个空的栈
022 函数参数:
023 SqStack *S 待初始化的栈
024 返回值:
025 bool 操作是否成功
026 ------------------------------------------------------------*/
027 bool InitStack(SqStack *S)
028 {
029 S-base = (ElemType *)malloc(STACK_INIT_SIZE *sizeof(ElemType));
030 if(S -base == NULL)
031 return false;
032 S -top = S -base;
033 S-stacksize = STACK_INIT_SIZE;
034 return true;
035 }
036
037 /*------------------------------------------------------------
038 操作目的: 销毁栈
039 初始条件: 栈S已存在
040 操作结果: 销毁栈S
041 函数参数:
042 SqStack *S 待销毁的栈
043 返回值:
044 无
045 ------------------------------------------------------------*/
046 void DestroyStack(SqStack *S)
047 {
048 assert(S != NULL);
049 free(S -base);
050 S-base = S-top = NULL;
051 }
052
053 /*------------------------------------------------------------
054 操作目的: 判断栈是否为空
055 初始条件: 栈S已存在
056 操作结果: 若S为空栈,则返回true,否则返回false
057 函数参数:
058 SqStack S 待判断的栈
059 返回值:
060 bool 是否为空
061 ------------------------------------------------------------*/
062 bool StackEmpty(SqStack S)
063 {
064 assert((S.base != NULL)(S.top != NULL));
065 return (S.base == S.top);
066 }
067
068 /*------------------------------------------------------------
069 操作目的: 得到栈的长度
070 初始条件: 栈S已存在
071 操作结果: 返回S中数据元素的个数
072 函数参数:
073 SqStack S 栈S
074 返回值:
075 int 数据元素的个数
076 ------------------------------------------------------------*/
077 int StackLength(SqStack S)
078 {
079 assert((S.base != NULL)(S.top != NULL));
080 return (S.top - S.base);
081 }
082
083 /*------------------------------------------------------------
084 操作目的: 得到栈顶元素
085 初始条件: 栈S已存在
086 操作结果: 用e返回栈顶元素
087 函数参数:
088 SqStack S 栈S
089 ElemType *e 栈顶元素的值
090 返回值:
091 bool 操作是否成功
092 ------------------------------------------------------------*/
093 bool GetTop(SqStack S, ElemType *e)
094 {
095 assert((S.base != NULL) (S.top != NULL));
096 if(S.top == S.base)
097 exit(0);
098 *e = *(S.top - 1);
099 return true;
100 }
101
102 /*------------------------------------------------------------
103 操作目的: 遍历栈
104 初始条件: 栈S已存在
105 操作结果: 依次对S的每个元素调用函数fp
106 函数参数:
107 SqStack S 栈S
108 void (*fp)() 访问每个数据元素的函数指针
109 返回值:
110 无
111 ------------------------------------------------------------*/
112 void StackTraverse(SqStack S, void (*fp)(ElemType))
113 {
114 assert((S.base != NULL) (S.top != NULL));
115 while(S.base S.top)
116 {
117 (*fp)(*S.base);
118 S.base++;
119 }
120 }
121
122 /*------------------------------------------------------------
123 操作目的: 压栈——插入元素e为新的栈顶元素
124 初始条件: 栈S已存在
125 操作结果: 插入数据元素e作为新的栈顶
126 函数参数:
127 SqStack *S 栈S
128 ElemType e 待插入的数据元素
129 返回值:
130 bool 操作是否成功
131 ------------------------------------------------------------*/
132 bool Push(SqStack *S, ElemType e)
133 {
134 if(S == NULL)
135 return false;
136 assert((S-base != NULL) (S -top != NULL));
137 if(S -top - S -base = S-stacksize)
138 {
139 S -base = (ElemType *)realloc(S -base,(S -stacksize + STACKINCREMENT) * sizeof(ElemType));
140 if(! S -base)
141 exit(0);
142 S -top = S-base + S -stacksize;
143 S -stacksize += STACKINCREMENT;
144 }
145 *(S -top++) = e;
146 return true;
147 }
148
149 /*------------------------------------------------------------
150 操作目的: 弹栈——删除栈顶元素
151 初始条件: 栈S已存在且非空
152 操作结果: 删除S的栈顶元素,并用e返回其值
153 函数参数:
154 SqStack *S 栈S
155 ElemType *e 被删除的数据元素值
156 返回值:
157 bool 操作是否成功
158 ------------------------------------------------------------*/
159 bool Pop(SqStack *S, ElemType *e)
160 {
161 if((* S).top == (*S).base)
162 return false;
163 *e = * --(* S).top;
164 return true;
165 }
C语言怎样判断合法转义字符
'\0'是八进制的转移字符,如果看到:\087这就是非法的,'\0x'表示十六进制,还有一些必备的如:'\n','\r'这些。
和普通的字符判断相同,比如判断和'a'是否相同,ch=='a',那么判断转义一样,如ch=='\n',逻辑表达式的结果只有两个,true和false,所有的逻辑表达式都一样,为真就是true,否则就是false。
#includestdio.h
int main(){
char a[20]="abc\'efgh";
int i=0;
for(i=0;i20;i++){
if(a[i]=='\\'a[i+1]=='\'')
printf("true,%d",i);
if(a[i]=='\'')
printf("false");
if(a[i]==0){
printf("%d",i);
break;
扩展资料:
转义序列通常有两种功能。第一个是编码一个句法上的实体,如设备命令或者无法被字母表直接表示的特殊数据。第二种功能,也叫字符引用,用于表示无法在当前上下文中被键盘录入的字符(如字符串中的回车符),或者在当前上下文中会有不期望的含义的字符(如C语言字符串中的双引号字符",不能直接出现,必须用转义序列表示)。
在后面那种情况,转义序列是一种由转义字符自身和一个被引用的字符组成的一个二合字母(digraph)情形。
参考资料来源:百度百科-转义字符
C语言中如何判断是不是合法转义字符?
'\0'是八进制的转移字符,如果看到:\087这就是非法的,'\0x'表示十六进制,还有一些必备的如:'\n','\r'这些。
和普通的字符判断相同,比如判断和'a'是否相同,ch=='a',那么判断转义一样,如ch=='\n',逻辑表达式的结果只有两个,true和false,所有的逻辑表达式都一样,为真就是true,否则就是false。
#includestdio.h
int main(){
char a[20]="abc\'efgh";
int i=0;
for(i=0;i20;i++){
if(a[i]=='\\'a[i+1]=='\'')
printf("true,%d",i);
if(a[i]=='\'')
printf("false");
if(a[i]==0){
printf("%d",i);
break;
数据类型关键字
short:修饰int,短整型数据,可省略被修饰的int。(KR时期引入)
long:修饰int,长整型数据,可省略被修饰的int。(KR时期引入)
long long:修饰int,超长整型数据,可省略被修饰的int。(C99标准新增)
signed:修饰整型数据,有符号数据类型。(C89标准新增)
unsigned:修饰整型数据,无符号数据类型。(KR时期引入)
restrict:用于限定和约束指针,并表明指针是访问一个数据对象的初始且唯一的方式。(C99标准新增)
复杂类型关键字
struct:结构体声明。(KR时期引入)
union:联合体声明。(KR时期引入)
enum:枚举声明。(C89标准新增)
typedef:声明类型别名。(KR时期引入)
sizeof:得到特定类型或特定类型变量的大小。(KR时期引入)
inline:内联函数用于取代宏定义,会在任何调用它的地方展开。(C99标准新增)
C语言 p=abc\078a\001b q=123\087\123\n 输出strlen分别为多
结果是8和3
分析
strlen 函数的原理是,遇到'\0' 空字符 就认为字符串结束
分析p
abc
\07是八进制数,为一个字符 '\a',代表 滴滴声
8
a
\001
b
共8个
分析q
123
\0 空字符
故只有3