Work_11

实现一个函数,可以左旋字符串中的k个字符。
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

//字符串翻转
void  Reverse_string(char *start, char *end){
    while (start < end){
        char temp = *start;
        *start = *end;
        *end = temp;
        start++;
        end--;
    }
}

//左旋k个字符
void Reverse(char* arr, int size, int k){
    //左旋k次 = 左旋 (k % size) 次
    k = k % size;

    //法一:
    while (k > 0){
        //左旋1次
        char* cur = arr;
        char temp = *arr;
        while (*(cur + 1)){
            *cur = *(cur + 1);
            cur++;
        }
        *cur = temp;
        k--;
    }
    
    ////法二: 三次翻转法 = 左旋
    ////将前k个字符进行翻转
    //char* start = arr;
    //char* end = arr + k - 1;
    //Reverse_string(start, end);
    ////将后面的字符进行翻转
    //start = end + 1;
    //end = arr + size - 1;
    //Reverse_string(start, end);
    ////整体翻转
    //start = arr;
    //Reverse_string(start, end);


}

int main(){
    char arr[10];
    printf("请输入十个以内的字符:\n");
    gets(arr);
    int k;
    int size = Mystring(arr);
    printf("请输入需要左旋字符的个数:");
    scanf("%d", &k);
    //左旋k个字符
    Reverse(arr, size, k);
    //输出
    printf("%s", arr);

    printf("\n");
    system("pause");
    return 0;
}

 

判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 =AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.

AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA

AABCD右旋一个字符得到DAABC

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

//字符串长度
int Mystring(char* arr){
    int count = 0;
    while (*arr){
        count++;
        arr++;
    }
    return count;
}

//字符串翻转
void  Reverse_string(char *start, char *end){
    while (start < end){
        char temp = *start;
        *start = *end;
        *end = temp;
        start++;
        end--;
    }
}

//左旋k个字符
void Reverse(char* arr, int size, int k){
    //左旋k次 = 左旋 (k % size) 次
    k = k % size;

    //法一:
    while (k > 0){
        //左旋1次
        char* cur = arr;
        char temp = *arr;
        while (*(cur + 1)){
            *cur = *(cur + 1);
            cur++;
        }
        *cur = temp;
        k--;
    }
    
    ////法二: 三次翻转法 = 左旋
    ////将前k个字符进行翻转
    //char* start = arr;
    //char* end = arr + k - 1;
    //Reverse_string(start, end);
    ////将后面的字符进行翻转
    //start = end + 1;
    //end = arr + size - 1;
    //Reverse_string(start, end);
    ////整体翻转
    //start = arr;
    //Reverse_string(start, end);


}

//比较字符串是否为翻转得来的
int Compare(char* str1, char* str2){
    int result = 0;
    int size = Mystring(str1);
    while (size){
        Reverse(str1, size, 1);
        if (strcmp(str1, str2) == 0){
            result = 1;
            break;
        }
        size--;
    }
    return result;
}

int main(){
    char str1[10], str2[10];
    printf("请输入第一个字符串:\n");
    gets(str1);
    printf("请输入第二个字符串:\n");
    gets(str2);
    //比较判断
    int result = Compare(str1, str2);
    if (result){
        printf("");
    }
    else {
        printf("");
    }

    printf("\n");
    system("pause");
    return 0;
}

 

posted @ 2019-03-05 19:33  lkimprove  阅读(150)  评论(0编辑  收藏  举报