字符串旋转问题

1.字符串左旋转k个字符,

思想:很简单,写两个for循环,外层是控制旋转的次数,内层就是旋转,每次将第一个元素赋给临时变量,在内层循环中将后一个元素赋给前一个元素,内层循环结束,将临时变量赋给字符串最后一元素的位置。下面详见代码

void anticlockwise(char ch[], int k){
    if (k > strlen(ch) || k == 0){
        printf("输入错误:
");
        return;
    }
    for (int i = 0; i < k; i++){
        char tmp = ch[0];
        for (int j = 0; j < strlen(ch) - 1; j++){
            ch[j] = ch[j + 1];
        }
        ch[strlen(ch) - 1] = tmp;
    }
    printf("%s
", ch);
}

2.判断字符串旋转后是否和另一个元素是否相等,相等返回1,否则返回0

思想:和上面所述问题思想大概一致,这次的外层循环控制条件是字符串1的长度,内层循环结束后判断旋转后的结果是否和字符串2相等,如果相等直接返回1,不相等继续遍历,当吧外层循环遍历完后,木有相等的,那么直接返回0,详见代码

int anticlockwiseIsEqual(char ch1[], char ch2[]){
    for (int i = 0; i < strlen(ch1); i++){
        char tmp = ch1[0];
        for (int j = 0; j < strlen(ch1) - 1; j++){
            ch1[j] = ch1[j + 1];
        }
        ch1[strlen(ch1) - 1] = tmp;
        if (strcmp(ch1, ch2) == 0){
            return 1;
        }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/du001011/p/10247639.html