现在的位置: 首页 > 综合 > 正文

C++字符串翻转操作

2018年05月13日 ⁄ 综合 ⁄ 共 895字 ⁄ 字号 评论关闭

举例:

I love cpp

翻转后

cpp love I

算法: 先翻转整个句子,再翻转每个单词

 

#include <stdio.h>
#include <string.h>

void reverseInPlace( char *input, int start, int end )
{
    char *s = input + start;
    char *e = input + end;
    while ( s < e )
    {
        char tmp = *s;
        *s = *e;
        *e = tmp;
        s++;
        e--;
    }
}

void reverseSentence ( char sentence[] )
{
    reverseInPlace(sentence,0,strlen(sentence)-1);  //翻转整个句子
    int len = strlen(sentence);
    int start = 0;
    int end = 0;
    bool lastIsChar = false;
    char *tmp = sentence;
    while ( '\0' != *tmp )
    {
        if ( *tmp != ' ' )
        {
            if ( lastIsChar == false )
            {
                lastIsChar = true;
                start = tmp - sentence;
            }
        }
        else if ( ' ' == *tmp )
        {
            if ( lastIsChar == true )
            {
                lastIsChar = false;
                end = tmp -sentence-1;
                reverseInPlace(sentence,start,end);
            }
        }
        tmp ++;
    }
    if ( lastIsChar == true )
    {
        reverseInPlace(sentence,start,tmp-sentence-1);
    }
}

int main(int argc,char *argv[])
{
    char sentence1[] = "I love csdn ";
    reverseSentence(sentence1);
    fprintf(stderr,"%s",sentence1);
    fprintf(stderr,"\n");
    char sentence2[] = "  but csdn don't love me";
    reverseSentence(sentence2);
    fprintf(stderr,"%s",sentence2);
    return 0;
}

 


抱歉!评论已关闭.