美文网首页
算法小记 · 字符串翻转

算法小记 · 字符串翻转

作者: 寒山半秋 | 来源:发表于2018-11-05 15:58 被阅读57次

写一个函数,实现翻转字符串的功能,并考虑时间复杂度、空间复杂度,使其尽可能最小

1. 字符串翻转:请把"I am a student.",翻转成".tneduts a ma I";

吾来打个样:

#include <stdio.h>
void reverseCharArray(char *str, char *begin, char *end) {
    while(begin < end) { //取地址,交换两个字符
        char temp = *begin;
        *begin = *end;
        *end = temp;
        begin++;
        end--;
    }
}

char *reverse_str(char *str) {
    if(NULL == str) { //字符串为空直接返回;
        return str;
    }
    char *begin;
    char *end;
    begin = end = str;
    
    while(*end != '\0') { //end指向字符串的末尾;
        end++;
    }
    --end;  //取出最后一个'.'字符;
    
    //取字符数组下标,进行交换;
    reverseCharArray(str, begin, end);
    
    return str; //返回结果;
}

int main(int argc, const char * argv[]) {
    char str[] = "I am a student.";
    printf("%s\n", reverse_str(str));
    return 0;
}

2. 字符串翻转:请把 "I am a student.",翻转成 "I ma a .tneduts";

吾来打个样:

#include <stdio.h>
void reverseCharArray(char *str, char *begin, char *end) {
    while(begin < end) { //取地址,交换两个字符
        char temp = *begin;
        *begin = *end;
        *end = temp;
        begin++;
        end--;
    }
}

char *reverseChar(char *str) {
    char *begin;
    char *end;
    begin = end = str;
    while (*end != '\0') {
        if (*end == ' ') {
            reverseCharArray(str, begin, end - 1);
            begin = end + 1;
        }
        else if (*(end + 1) == '\0') {  //当*(end + 1)取出的是字符串数组最后的'\0'的时候
            reverseCharArray(str, begin, end);
        }
        end++;
    }
    return str;
}

int main(int argc, const char * argv[]) {
    char str[] = "I am a student.";
    printf("%s\n", reverseChar(str));
    return 0;
}

3. 字符串翻转:请把 "I am a student.",翻转为 "student. a am i";

吾来打个样:

#include <stdio.h>
void reverseCharArray(char *str, char *begin, char *end) {
    while(begin < end) { //取地址,交换两个字符
        char temp = *begin;
        *begin = *end;
        *end = temp;
        begin++;
        end--;
    }
}

char *reverseChar(char *str) {
    char *begin;
    char *end;
    begin = end = str;
    while (*end != '\0') {
        if (*end == ' ') {
            reverseCharArray(str, begin, end - 1);
            begin = end + 1;
        }
        else if (*(end + 1) == '\0') {  //当*(end + 1)取出的是字符串数组最后的'\0'的时候
            reverseCharArray(str, begin, end);
        }
        end++;
    }
    return str;
}

int main(int argc, const char * argv[]) {
    char str[] = "I am a student.";
    char *begin;
    char *end;
    begin = end = str;

    while(*end != '\0') { //end指向字符串的末尾;
        end++;
    }
    --end;  //取出最后一个'.'字符;
    reverseCharArray(str, begin, end);
    printf("%s\n", reverseChar(str));
    return 0;
}

相关文章

  • 初级脚本算法

    1.翻转字符串算法挑战 实战翻转字符串算法你可以先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,...

  • W3Cschool JavaScript脚本算法编程实战 初级脚

    初级脚本算法 1. 翻转字符串算法挑战 实战翻转字符串算法 你可以先把字符串转化成数组,再借助数组的reverse...

  • 算法小记 · 字符串翻转

    写一个函数,实现翻转字符串的功能,并考虑时间复杂度、空间复杂度,使其尽可能最小 1. 字符串翻转:请把"I am ...

  • LeetCode基础算法-字符串

    LeetCode基础算法-字符串 LeetCode 算法 字符串 1. 翻转字符串 编写一个函数,其作用是将输入的...

  • 【W3Cschool】初级脚本算法学习笔记

    1. 翻转字符串算法挑战 思路:str字符串存入数组,利用数组的reverse()方法翻转,再通过数组的join(...

  • Day07 JavaScript(Algorithm)

    Free Code Camp的JavaScript算法 翻转字符串(Reverse a String) 实现:先把...

  • FreeCodeCamp Basic Algorithm Scr

    FreeCodeCamp 初级算法 个人笔记,仅作留档 Reverse a String 翻转字符串先把字符串转化...

  • js算法

    排序算法 冒泡排序 快速排序 字符串操作 判断回文字符串 翻转字符串 反向遍历字符串 function reve...

  • Freecodecamp 算法题

    Freecodecamp 算法题 1. Reverse a String 翻转字符串 先把字符串转化成数组,再借助...

  • FreeCodeCamp初级算法部分学习

    原文:FreeCodeCamp初级算法部分学习 Reverse a String 翻转字符串 先把字符串转化成数组...

网友评论

      本文标题:算法小记 · 字符串翻转

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