美文网首页
实现字符数组指定位置翻转

实现字符数组指定位置翻转

作者: 烟影很美 | 来源:发表于2016-07-12 19:03 被阅读61次

    原题如下:
    请实现如下函数, 将一个字符数组在指定位置进行翻转.
    char *invert(char *str, int i)
    例如 invert("123456", 2), 翻转后的结果为 "45123".

    算法或者说逻辑就不说了, 这里是一个C语言渣的学习记录, 这个题涉及到的问题有:

    1. C语言不支持返回指针, 这是不安全的
      (参考:http://blog.csdn.net/turkeyzhou/article/details/6104135)
    2. char *str = "123"; 这样初始化的字符串保存在常量区, 不能修改字符串的值. char str[] = "123";这样声明才可以
      (可参考:http://blog.sina.com.cn/s/blog_8f99a1640101okxa.html)
    3. 字符串末尾有一个结束符'\0', 对字符串数组操作时需注意

    最后代码:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    char * invert(char *str, int i);
    
    int main() {
    
        char *str = "12345";
        char *newStr = invert(str, 2);
        printf("%s\n", newStr);
        free(newStr);
        
        return 0;
    }
    
    char * invert(char *str, int i) {
        
        int len = strlen(str) + 1;
        char newStr[len];
        printf("%d\n", len);
        
        for (int k = 0; k < len; k++) {
            char litter = str[k];
    
            printf("litter:%c\n", litter);
            if(k < i) {
                newStr[len-i-1+k] = litter;
            } else if (k == len-1) {
                newStr[len] = litter;
            } else {
                newStr[k-i] = litter;
            }
        }
        
        char *res = (char *)malloc(len * sizeof(char));
    
        strcpy(res, newStr);
    
        return res;
    }
    

    相关文章

      网友评论

          本文标题:实现字符数组指定位置翻转

          本文链接:https://www.haomeiwen.com/subject/yqlsjttx.html