Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用C+旋转字符串+;_C++_String - Fatal编程技术网

C++ 使用C+旋转字符串+;

C++ 使用C+旋转字符串+;,c++,string,C++,String,可能重复: 我在C++中应用了一个命令行输入程序。我正在命令行中输入一个字符串 int main(int argc, char** argv) { if(argc != 2) { cerr << "Invalid number of CMD arguments" << endl; return 1; } string StringVal

可能重复:

我在C++中应用了一个命令行输入程序。我正在命令行中输入一个字符串

    int main(int argc, char** argv)
    {
        if(argc != 2)
        {
             cerr << "Invalid number of CMD arguments" << endl;
             return 1;
        }

        string StringValue = argv[1];
        cout << StringValue << endl;
     }

其中“^”是开始“|”是结束。如何执行此操作?

使用
std::rotate

string foo=“abcdefg”;
旋转(foo.begin(),foo.begin()+3,foo.end());

不能使用
std::rotate

string foo=“abcdefg”;
旋转(foo.begin(),foo.begin()+3,foo.end());

如果你想自己实现

int main() 
{
    string StringValue = "^STATES|";
    string aDoubleStr = StringValue;
    aDoubleStr.append(StringValue);
    for(int i = StringValue.length() - 1; i >= 0; i--)
    {
        string aNewStr = aDoubleStr.substr(i , StringValue.length());
        cout << aNewStr.c_str() << endl;
    }

    return 0;
}
intmain()
{
字符串StringValue=“^STATES |”;
字符串aDoubleStr=StringValue;
aDoubleStr.append(StringValue);
对于(int i=StringValue.length()-1;i>=0;i--)
{
string aNewStr=aDoubleStr.substr(i,StringValue.length());

如果你想自己实现

int main() 
{
    string StringValue = "^STATES|";
    string aDoubleStr = StringValue;
    aDoubleStr.append(StringValue);
    for(int i = StringValue.length() - 1; i >= 0; i--)
    {
        string aNewStr = aDoubleStr.substr(i , StringValue.length());
        cout << aNewStr.c_str() << endl;
    }

    return 0;
}
intmain()
{
字符串StringValue=“^STATES |”;
字符串aDoubleStr=StringValue;
aDoubleStr.append(StringValue);
对于(int i=StringValue.length()-1;i>=0;i--)
{
string aNewStr=aDoubleStr.substr(i,StringValue.length());

cout我也希望Andrew的解决方案使用
std::rotate()
。 但由于OP在评论中要求其他解决方案,我想在这里“推”一些其他想法。这一个不是很有效:

std::string value = "^STATES|";
size_t pos = 3;
value = value.substr(pos) + value.substr(0, pos);
这要追溯到道格·麦克罗伊、布赖恩·克尼根和p.J.普劳格(见乔恩·本特利:《编程珍珠》,第2章)。 双手并排握住,拇指朝同一方向。 (一只手放在另一只手上方,手掌放在身体上可能更容易。) 转动每只手,然后转动连接的双手:

_|||| _||||   =>  ||||_ ||||_   =>  _|||| _|||| 
 \L /  \ R/       \L /  \ R/         \R /  \ L/ 
在C++中:

std::string::iterator mid = value.begin() + pos;
std::reverse(value.begin(), mid);
std::reverse(mid, value.end());
std::reverse(value.begin(), value.end());

我还希望Andrew的解决方案使用
std::rotate()
。 但由于OP在评论中要求其他解决方案,我想在这里“推”一些其他想法。这一个不是很有效:

std::string value = "^STATES|";
size_t pos = 3;
value = value.substr(pos) + value.substr(0, pos);
这要追溯到道格·麦克罗伊、布赖恩·克尼根和p.J.普劳格(见乔恩·本特利:《编程珍珠》,第2章)。 双手并排握住,拇指朝同一方向。 (一只手放在另一只手上方,手掌放在身体上可能更容易。) 转动每只手,然后转动连接的双手:

_|||| _||||   =>  ||||_ ||||_   =>  _|||| _|||| 
 \L /  \ R/       \L /  \ R/         \R /  \ L/ 
在C++中:

std::string::iterator mid = value.begin() + pos;
std::reverse(value.begin(), mid);
std::reverse(mid, value.end());
std::reverse(value.begin(), value.end());

如果我不想使用旋转函数的话?@user1554408:write your own)。但是为什么不使用为此目的创建的标准函数呢?是否可以在整个字符串中循环并更改字符串中某个字符的值?@user1554408:yes,可以:
foo[2]='A';
@user1554408这样做是可能的,但是重新实现
std::rotate
几乎没有意义,除非这是一个练习或家庭作业。如果我想在没有rotate函数的情况下执行它?@user1554408:编写您自己的)。但是为什么不使用为此目的创建的标准函数呢?是否可以在整个字符串中循环并更改字符串中字符的值?@user1554408:是的,有可能:
foo[2]='A';
@user1554408这样做是可能的,但是重新实施
std::rotate
几乎没有意义,除非这是一个练习或家庭作业。就地解决方案Viktor Latypov链接到上面的帖子是完全重复的。就地解决方案Viktor Latypov链接到上面的帖子是完全重复的。