算法题1--字符串反转算法

16 阅读1分钟

字符串反转算法

str="world hello"; 翻转字符串为 str="hello world";

要求空间复杂度为1

两个步骤 1:将整体字符串反转为“olleh dlrow” 2:将每个单词反转为“hello world”


//反转字符串算法
#include <stdio.h>

void swap(char* msg,int i,int j){
    char temp = msg[i];
    msg[i] = msg[j];
    msg[j] = temp;
}

void revertMsgForChar(char *msg,int start,int end){
    while(start < end){
        swap(msg,start,end);
        start++;
        end --;
    }
}

  
  


int main(int argc, char *argv[]){
    char msg[] = {'w','o','r','l','d',' ','h','e','l','l','o'};

    //char msg[]={'I' ,' ', 'a' ,'m' ,' ', 'w' ,'i', 'n','n','e','r'};

    int length = sizeof(msg);
    printf("length = %d \n", length);
    revertMsgForChar(msg,0,length-1);
    int start = 0;
    int end = length - 1;
    for(int i=0;i<length;i++){
        if(' ' == msg[i]){
            end = i-1;
            revertMsgForChar(msg,start,end);
            start = i+1;
        }
    }
    revertMsgForChar(msg,start,length - 1);
    for(int i=0;i<length;i++){
        printf("%c ", msg[i]);
    }
    printf("\n");


    return 0;

}