字符串循环右移

    xiaoxiao2021-03-25  68

    问题: 编写一个函数,作用是把一个char组成的字符串循环右移m个。比如原来是”abcdefghi”,如果m=2,移位后应该是“hiabcdefg”。

    解法: (解法一)使用strcpy

    void rightShifting(char *s, int step) { int n = strlen(s)-step; char tmp[strlen(s) + 1]; strcpy(tmp, s + n); strcpy(tmp + step, s); tmp[strlen(s)] = '\0'; strcpy(s, tmp); } int main() { char s[] = "abcdefghi"; int m = 2; rightShifting(s,m); cout<<s<<endl; return 0; }

    (解法二)使用memcpy

    void rightShifting(char *s, int step) { int n = strlen(s) - step; char tmp[strlen(s) + 1]; memcpy(tmp, s + n, step); memcpy(tmp + step, s, i_n); tmp[strlen(s)] = '\0'; memcpy(s, tmp,strlen(tmp)+1); } int main() { char s[] = "abcdefghi"; int m = 2; rightShifting(s,m); cout<<s<<endl; return 0; }

    (解法三)三步反转 (1)将原字符串分为X和Y两个部分 (2)将X的所有字符反转,再将Y的所有字符反转 (3)最后,将上述步骤得到的整个字符串进行整体反转

    //三步反转 void reverse(char *s, int from, int to) { while (from < to) { char tmp = s[from]; s[from++] = s[to]; s[to--] = tmp; } } void rightShifting(char *s,int n, int m) { m %= n; reverse(s, 0, n - m - 1); reverse(s, n - m, n - 1); reverse(s, 0, n - 1); } int main() { char s[] = "abcdefghi"; int m = 2; rightShifting(s,strlen(s),m); cout<<s<<endl; return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-37518.html

    最新回复(0)