字符串的小算法

转载 2016年06月01日 23:30:26

http://www.nowamagic.net/librarys/veda/detail/286

编码实现字符串右移n位,如"diopHeg"右移2位为"egdiopH"

思路1:只要把需要移动的最后n个字符保存下来,把前面剩下的全部后移n个位置,最后把开始保存好的n 个字符填充到前面n个位置。注意:n超过字符串长度的情况,所以事前先做n mod 字符串的长度。

01
int RightMoveStr(char* src,int n)
02
{
03
    int len=strlen(src);
04
    int mov=n%len;
05
    char* rstr=(char*)malloc((mov+1)*sizeof(char));
06
    if(rstr==NULL)
07
    {
08
        return 0;
09
    }
10
    int i=0;
11
    while(i<mov)
12
    {
13
        rstr[i]=src[len-mov+i];
14
        i++;
15
    }
16
    rstr[i]='\0';
17
    i=len-mov-1;
18
    while(i>=0)
19
    {
20
        src[i+mov]=src[i];
21
        i--;
22
    }
23
    i=0;
24
    while(i<mov)
25
    {
26
        src[i]=rstr[i];
27
        i++;
28
    }
29
    free(rstr);
30
    return 1;
31
}
思路2:使用字符串库函数简化编码工作,用一个新的字符串ss保存结果,先把源字符串指针s移到需要右移的子串的第一个字符的位置,如"diopHeg"右移2位就把s移动到指向'e',接着 strcpy(ss,s),把s所指位置赋值为'\0',最后strcat(ss,s)。

01
int RightMove(char* src,char* &ssrc,int n)
02
{
03
    int len=strlen(src);
04
    ssrc=(char*)malloc(sizeof(char)*(len+1));
05
    n=n%len;
06
    if(ssrc==NULL)
07
    {
08
        return 0;
09
    }
10
    int i=0;
11
    char* s=src;
12
    while(i<len-n)
13
    {
14
        s++;
15
        i++;
16
    }
17
    strcpy(ssrc,s);
18
    *s='\0';
19
    strcat(ssrc,src);
20
    return 1;     
21
}


相关文章推荐

乱序字符串算法

乱序字符串蛮力法题目链接:lintcode乱序字符串题目链接 思路等会睡醒之后写吧 #include "string" #include "algorithm" #include "stdio.h...

确定两个字符串通过重新排序是否可以相同的算法

首先要确定字母是否区分大小写,是否要考虑空白字符?算法一: 此算法主要使用了JDK已有排序功能来实现的,考虑了空白字符,也区分了大小写。/** * 判断两个字符串是否可以通过重新排序相等 * @...

字符串算法

  • 2014-03-17 22:35
  • 690KB
  • 下载

字符串匹配的KMP算法

  • 2014-05-29 14:11
  • 2.02MB
  • 下载

字符串搜索之Boyer-Moore算法

在用于查找子字符串的算法当中,BM(Boyer-Moore)算法是目前被认为最高效的字符串搜索算法,它由Bob Boyer和J Strother Moore设计于1977年。 一般情况下,比KMP算法...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)