面试题 42 翻转

(1)经典面试题: 翻转句子中的单词,并将单词的字母顺序翻转, 标点符号和字母一样处理

void Reverse(char *begin, char *end){

    if(begin == NULL || end == NULL)
        return ;
    while(begin < end){
        char tp = *begin;
        *begin = *end;
        *end = tp;
        begin++;
        end--;
    }
}

char * ReverseSentence(char *sentence){

    if(sentence == NULL)
        return NULL;
    char *end = sentence;
    while(*end != ‘0' )end++;
    end--;
    Reverse(sentence, end);
    char *begin = sentence;
    end = sentence;
    while(begin != ''){
        while(*end != ' ' && *end != '') end++;
        Reverse(begin,end-1);
        while(*end == ' ') end++;
        begin = end;
    }
    return sebtence;
}

(2)左旋若干个字符

char * LeftRotateString(char *str, int n){

    //if(str == NULL) return str;
    int len = strlen(str);
    if(str == NULL || n <0 || n > len)
        return str;
    
    char *firstbegin = str;
    char *firstend = str + n-1;
    char * secondbegin = str + n;
    char * secondend = str +len -1;
    Reverse(firstbegin, firstend);
    Reverse(secondbegin, secondend);
    Reverse(firstbegin, secondend);
    
    return str;
    
}
原文地址:https://www.cnblogs.com/graph/p/3327141.html