• 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("请输入十个以内的字符:
    ");
        gets(arr);
        int k;
        int size = Mystring(arr);
        printf("请输入需要左旋字符的个数:");
        scanf("%d", &k);
        //左旋k个字符
        Reverse(arr, size, k);
        //输出
        printf("%s", arr);
    
        printf("
    ");
        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("请输入第一个字符串:
    ");
        gets(str1);
        printf("请输入第二个字符串:
    ");
        gets(str2);
        //比较判断
        int result = Compare(str1, str2);
        if (result){
            printf("");
        }
        else {
            printf("");
        }
    
        printf("
    ");
        system("pause");
        return 0;
    }
  • 相关阅读:
    解决PHP处理图片时内存占用过高问题
    destoon下动态链接301到伪静态(ngnix)
    微信小程序转百度小程序代码
    解决:本图片来自微信公众号,未经许可,不能引用 问题
    MP4文件批量转码成MP3
    dt框架自定义url规则
    织梦后台基本参数无法保存解决办法
    关于tomcat启动没有进行编译或者编译报错的问题
    zf-安徽桐城关于(资源中心-数据录入)上传文件后没有进行处理Excel文件的原因
    zf-关于平台的用户名密码的设置
  • 原文地址:https://www.cnblogs.com/lkimprove/p/10479071.html
Copyright © 2020-2023  润新知