字符串反转

来源:互联网 发布:初中生编程 编辑:程序博客网 时间:2024/06/08 02:42

将字符串反转


简单的将字符串反转一下,如有“hello”,将前面三个字符串移到后面,那么结果是”lohel”,用代码实现。
现在直接上代码了,两种实现方式。

#include <iostream>#include <cstdlib>#include <cstring>const int N = 1024;///////////////// 空间复杂度 O(k)int string_spin(char *line, int k){    if (line == NULL || k <= 0)        return -1;    int len = strlen(line);    if (k >= len)        return 0;    char *p = new char[k+1];    int i = 0;    for (i = 0; i < k; i++)        p[i] = line[i];    p[i] = 0;    //line[i] = 0;    int j = 0;    for (i = k; i < len; i++)    {        line[j++] = line[i];    }    for (i = 0; i < k; i++)    {        line[j++] = p[i];    }    line[j] = 0;    std::cout << "j, len " << j << "," << len << std::endl;     delete [] p;    p = NULL;    return 0;}///////////////////////////// 空间复杂度 O(1),比较有技巧性int reverse_string(char *line, int low, int high);int string_spin_1(char *line, int k){    if (line == NULL || k <= 0)        return -1;    int len = strlen(line);    if (k >= len)        return 0;    reverse_string(line, 0, k-1);    reverse_string(line, k, len-1);    reverse_string(line, 0, len-1);    return 0;}int reverse_string(char *line, int low, int high){    if (low >= high)        return -1;    int i = 0;    int len = high - low + 1;    int index = 0;    /*    if (len % 2 == 0) {        index = len / 2;    } else {        index = len / 2;    }    */    index = len / 2;    i = 0;    char tmp;    for (i = 0; i < index; i++)    {        tmp = line[low+i];        line[low+i] = line[high-i];        line[high-i] = tmp;    }    return 0;}////////////////////////////int main(int argc, char *argv[]){    char line[N] = "helloworld";    std::cout << "org string " << line << std::endl;    int k = 3;    //int ret = string_spin(line, k);    int ret = string_spin_1(line, k);    std::cout << "spin string " << line << std::endl;    int i = 0;    for (i = 0; i < 10; i++)        std::cout << line[i];    std::cout << std::endl;    return 0;}

比较有技巧性的解法。

原创粉丝点击