找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 367|回复: 5

前缀判断

[复制链接]

205

主题

173

回帖

6925

积分

论坛元老

积分
6925
发表于 2013-6-4 23:10:41 | 显示全部楼层 |阅读模式

如下的代码判断 needle_start指向的串是否为haystack_start指向的串的前缀,如不是,则返回NULL。

    比如:"abcd1234" 就包含了 "abc" 为前缀

char* prefix(char* haystack_start, char* needle_start)
{
    char* haystack = haystack_start;
    char* needle = needle_start;

   
    while(*haystack && *needle){
        if(______________________________) return NULL;  //填空位置
    }
   
    if(*needle) return NULL;
   
    return haystack_start;
}

14

主题

65

回帖

0

积分

新手上路

积分
0
发表于 2013-6-5 19:29:09 | 显示全部楼层
*haystack++ != *needle++

205

主题

173

回帖

6925

积分

论坛元老

积分
6925
 楼主| 发表于 2013-6-5 22:26:07 | 显示全部楼层
正确

205

主题

173

回帖

6925

积分

论坛元老

积分
6925
 楼主| 发表于 2013-6-5 22:32:18 | 显示全部楼层
这个题考自增运算符,现详细分析如下:


[bgcolor=#ffffff]该语句中  *haystack++ != *needle++ 实际上做了三件事:[/bgcolor]
[bgcolor=#ffffff]
[/bgcolor]

[bgcolor=#ffffff]1、++运算符高于*运算符  ,所以先做++运算,此时++操作符产生一份[/bgcolor][bgcolor=#ffffff]haystack的拷贝,记为A[/bgcolor]
[bgcolor=#ffffff]
[/bgcolor]

[bgcolor=#ffffff]2、++操作符增加[/bgcolor][bgcolor=#ffffff]haystack的值[/bgcolor]
[bgcolor=#ffffff]
[/bgcolor]

[bgcolor=#ffffff]3、在A上进行*操作符,间接访问。对于[/bgcolor][bgcolor=#ffffff]needle是[/bgcolor][bgcolor=#ffffff]同样的道理[/bgcolor]

1

主题

3

回帖

0

积分

新手上路

积分
0
发表于 2013-6-7 16:41:44 | 显示全部楼层
类似于
int i, j;
j=i++;
先取了i的值赋给j,然后++。这里是先用*取了needle指向的值,然后++,可以这样理解吗果子?

205

主题

173

回帖

6925

积分

论坛元老

积分
6925
 楼主| 发表于 2013-6-9 15:01:57 | 显示全部楼层
C语言优先级运算符
优先级
运算符
名称或含义
使用形式
结合方向
说明
1
[]
数组下标
数组名[常量表达式]
左到右
()
圆括号
(表达式)/函数名(形参表)
.
成员选择(对象)
对象.成员名
->
成员选择(指针)
对象指针->成员名
2
-
负号运算符
-表达式
右到左
单目运算符
(类型)
强制类型转换
(数据类型)表达式
++
自增运算符
++变量名/变量名++
单目运算符
--
自减运算符
--变量名/变量名--
单目运算符
*
取值运算符
*指针变量
单目运算符
&
取地址运算符
&变量名
单目运算符
!
逻辑非运算符
!表达式
单目运算符
~
按位取反运算符
~表达式
单目运算符
sizeof
长度运算符
sizeof(表达式)
3
/
表达式/表达式
左到右
双目运算符
*
表达式*表达式
双目运算符
%
余数(取模)
整型表达式/整型表达式
双目运算符
4
+
表达式+表达式
左到右
双目运算符
-
表达式-表达式
双目运算符
5
<<
左移
变量<<表达式
左到右
双目运算符
>>
右移
变量>>表达式
双目运算符
6
>
大于
表达式>表达式
左到右
双目运算符
>=
大于等于
表达式>=表达式
双目运算符
<
小于
表达式<表达式
双目运算符
<=
小于等于
表达式<=表达式
双目运算符
7
==
等于
表达式==表达式
左到右
双目运算符
!=
不等于
表达式!= 表达式
双目运算符
8
&
按位与
表达式&表达式
左到右
双目运算符
9
^
按位异或
表达式^表达式
左到右
双目运算符
10
|
按位或
表达式|表达式
左到右
双目运算符
11
&&
逻辑与
表达式&&表达式
左到右
双目运算符
12
||
逻辑或
表达式||表达式
左到右
双目运算符
13
?:
条件运算符
表达式1? 表达式2: 表达式3
右到左
三目运算符
14
=
赋值运算符
变量=表达式
右到左
/=
除后赋值
变量/=表达式
*=
乘后赋值
变量*=表达式
%=
取模后赋值
变量%=表达式
+=
加后赋值
变量+=表达式
-=
减后赋值
变量-=表达式
<<=
左移后赋值
变量<<=表达式
>>=
右移后赋值
变量>>=表达式
&=
按位与后赋值
变量&=表达式
^=
按位异或后赋值
变量^=表达式
|=
按位或后赋值
变量|=表达式
15
,
逗号运算符
表达式,表达式,…
左到右
从左向右顺序运算
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

果子博客
扫码关注微信公众号

Archiver|手机版|小黑屋|风叶林

GMT+8, 2026-2-1 18:07 , Processed in 0.069671 second(s), 20 queries .

Powered by 风叶林

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表