custa
C++博客
::
首页
::
新随笔
::
联系
::
聚合
::
管理
posts - 3, comments - 6, trackbacks - 0
<
2010年8月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
给我留言
查看公开留言
查看私人留言
随笔档案
2010年8月 (3)
My Blogs
custa - CSDN
龍蝦 - 博客园
搜索
最新评论
1. re: 数组定义的维数类型限制[未登录]
因为M$的vc不支持c99标准
--feng
2. re: 数组定义的维数类型限制
@无名
恩,后来想了下。
把可变长度变量放在栈顶,根据长度调整栈指针就可以做到了。当然,不能致使栈溢出的情况下。
这种可变长度变量,还是要看编译器支不支持的问题。
--custa
3. re: 数组定义的维数类型限制[未登录]
其实这个主要是因为g++,和gcc支持一种叫做可变长度数组(好像是这个名字)导致的
--无名
4. re: C++重载箭头操作符的理解
-> 最常见的就是迭代器了。。。
--大渊献
5. re: C++重载箭头操作符的理解
@ZUHD
呵呵,C++这样设计的。
--custa
阅读排行榜
1. C++重载箭头操作符的理解(2308)
2. 数组定义的维数类型限制(2050)
3. 查找字符串中字符间不同的最大子串(619)
评论排行榜
1. C++重载箭头操作符的理解(3)
2. 数组定义的维数类型限制(3)
3. 查找字符串中字符间不同的最大子串(0)
查找字符串中字符间不同的最大子串
#include
<
stdio.h
>
#include
<
stdlib.h
>
#include
<
string
.h
>
#define
SetSize 256
//
字符集大小
//
说明:查找字符串中字符间不同的最大子串
//
参数:string 待搜索字符串
//
rst 存放找到的最大子串
//
返回:找到最大子串长度
int
findMaxSubstring(
const
char
*
string
,
char
*
rst)
{
const
char
*
p
=
string
;
const
char
*
substring
=
p;
//
当前子串
int
length
=
0
;
//
当前子串长度
const
char
*
maxSubstring
=
substring;
//
已经找到的最大子串
int
maxLength
=
0
;
//
已经找到的最大子串长度
//
遍历字符串过程中,字符最后一次出现的位置
const
char
*
position[SetSize];
memset(position,
0
, SetSize
*
sizeof
(
char
*
));
char
ch;
//
while
((ch
=
*
p)
!=
'
\0
'
)
{
if
(position[ch]
<
substring)
{
//
字符在当前子串首次出现
length
++
;
if
(length
>
maxLength)
{
maxSubstring
=
substring;
maxLength
=
length;
}
}
else
{
substring
=
position[ch]
+
1
;
//
当前子串从该字符上次出现的位置后面开始
length
=
p
-
position[ch];
}
position[ch]
=
p;
//
保存字符的位置
p
++
;
}
//
拷贝找到的最大子串
strncpy(rst, maxSubstring, maxLength);
rst[maxLength]
=
'
\0
'
;
return
maxLength;
}
据说这是微软面试题。
posted on 2010-08-29 17:30
custa
阅读(619)
评论(0)
编辑
收藏
引用
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理