您的位置:首页 > 其它

几个经典的字符串操作算法

2013-08-07 16:24 323 查看
1、编写函数,实现把一个char组成的字符串循环右移n位。如abcdehi,n=2,则hiabcde。

示例代码

View Code?
2、输入一行字符串,找出其中出现的相同且长度最长的字符串,输出它及其首字符的位置。如yyabcdabjcabceg,则输出为abc,3。

大体思路:把字符串yyabcdabjcabceg拆解:

yyabcdabjcabceg

yabcdabjcabceg

abcdabjcabceg

...

ceg

eg

g

然后对字符串进行排序,比较相邻字符串的前驱,求最长的共公前驱。

在我们的程序中的体现,我们没有用这种方法,因为这种方法在排序中会用很多时间。我们借用了C++的实现函数find来巧妙的实现。

注:basic_string::substr

basic_string substr(size_type pos = 0, size_type n = npos) const;

The member function returns an object whose controlled sequence is a copy of up to n elements of the controlled sequence beginning at position pos.

返回一个从指定位置开始,并具有指定长度的子字符串。

参数

pos 必选。所需的子字符串的起始位置。字符串中第一个字符的索引为 0。

n 可选项。返回的子字符串中包含的字符数。

备注 如果 n 为 0 或负数,将返回一个空字符串。如果没有指定该参数,则子字符串将延续到字符串的结尾。

在VS中测试,如是n是负数或大于主串的总长度,则输出是pos开始到主串末尾的字符。

示例代码

View Code?
3、实现strstr()功能。如主串是12345678,子串是234,则返回2345678。

示例代码

View Code?
4、将一句话中的单词倒置,标点符号不倒换。如“i come from tianjin.”,倒换后变成“tianjin. from come i”。

大体思路:先把整个字符串调整,再针对每个单词进行调整。

示例代码

View Code?
5、求一个字符串中连续出现次数最多的子串。

大体思路:如abcbcbcabc,则把字符串切割成:

abcbcbcabc

bcbcbcabc

cbcbcabc

bcbcabc

cbcabc

bcabc

...

bc

c

然后,从第一个子串开始到最后一个子串,将当前串与后面的每个子串进行字符匹配,并统计。

示例代码

View Code?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: