C++程序 左旋和右旋字符串

C++程序 左旋和右旋字符串

在开发中经常需要对字符串进行操作,其中左旋和右旋字符串操作也是常用的操作之一。左旋字符串是将前面的若干个字符转移到字符串的尾部,右旋字符串则是将字符串的尾部若干字符转移到字符串的头部。C++语言提供了一些字符串操作函数,但是这两种操作并不直接提供函数。本文将介绍如何使用C++语言实现字符串的左旋和右旋操作。

左旋字符串

左旋字符串的实现主要通过翻转字符串的两个部分来实现。比如,对于字符串abcdefg和左旋2步,我们可以先翻转字符串前两个字符ab和后面的所有字符cdefg,得到字符串bagfedc,然后再翻转整个字符串,得到结果cdefgab

以下为左旋字符串的C++实现代码:

#include <iostream>
#include <string>

using namespace std;

// 翻转字符串中[start, end]部分
void reverse(string& str, int start, int end) {
    while (start < end) {
        swap(str[start], str[end]);
        start++;
        end--;
    }    
}

// 字符串左旋k步
string leftRotateString(string str, int k) {
    int len = str.size();
    // 每次将前k个字符翻转到字符串末尾
    reverse(str, 0, k-1);
    reverse(str, k, len-1);
    // 整个字符串翻转
    reverse(str, 0, len-1);
    return str;
}

int main() {
    string str = "abcdefg";
    int k = 2;
    string res = leftRotateString(str, k);
    cout << "左旋 " << k << " 步后:" << res << endl;
    return 0;
}

上述代码中,我们首先定义了一个函数reverse来翻转字符串中指定部分,然后使用该函数实现了字符串左旋函数leftRotateString。在函数中,我们分别翻转前k个字符和剩余字符,然后再翻转整个字符串。最后,我们将结果返回。在主函数中,我们使用字符串abcdefg,并左旋2步,输出结果为cdefgab

右旋字符串

右旋字符串可以通过左旋字符串‘string.size()-k’步来实现。比如,对于字符串abcdefg和右旋2步,我们可以先计算需要左旋的步数为string.size()-2,然后再调用左旋函数即可。

以下为右旋字符串的C++实现代码:

#include <iostream>
#include <string>

using namespace std;

// 翻转字符串中[start, end]部分
void reverse(string& str, int start, int end) {
    while (start < end) {
        swap(str[start], str[end]);
        start++;
        end--;
    }    
}

// 字符串右旋k步
string rightRotateString(string str, int k) {
    int len = str.size();
    int left = len-k%len;   // 需要左旋的步数
    // 翻转前left个字符和剩余字符
    reverse(str, 0, left-1);
    reverse(str, left, len-1);
    // 整个字符串翻转
    reverse(str, 0, len-1);
    return str;
}

int main() {
    string str = "abcdefg";
    int k = 2;
    string res = rightRotateString(str, k);
    cout << "右旋 " << k << " 步后:" << res << endl;
    return 0;
}

在上述代码中,我们定义了与左旋函数相同的翻转函数,并实现了字符串的右旋函数rightRotateString。在函数中,我们先计算需要左旋的步数为string.size()-k,然后调用左旋函数即可。具体来说,我们分别翻转前left个字符和剩余字符,然后再翻转整个字符串。最后,我们将结果返回。在主函数中,我们使用字符串abcdefg,并右旋2步,输出结果为fgabcde

结论

本文介绍了C++语言中如何实现字符串的左旋和右旋操作。通过翻转字符串的部分和整个字符串,我们可以高效地实现这两种操作。对于字符串操作,我们还可以使用其他字符串函数和库来实现不同的功能,提高开发效率。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 示例