Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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++ 函数操作字符串(“abcdef”-“faebdc”)_C++_String - Fatal编程技术网

C++ 函数操作字符串(“abcdef”-“faebdc”)

C++ 函数操作字符串(“abcdef”-“faebdc”),c++,string,C++,String,大家好,我正在处理一个函数,以下面的方式操作任何字符串 “abc”->“cab” “abcd”->“dacb” “abcdef”->“faebdc” “divergenta”->“adtinveerg” 。。。等等 这是我到目前为止想出的代码。我认为它可以做到这一点,但我认为代码和解决方案有点难看,我不确定它是否是防故障的,是否在每个给定的情况下都能正常工作。我将非常感谢您对这段代码的任何输入,或者您将如何编写此函数的任何示例。我请求你记住我是一个非常优秀的人,所以不要对我太苛刻 string

大家好,我正在处理一个函数,以下面的方式操作任何字符串

“abc”->“cab”

“abcd”->“dacb”

“abcdef”->“faebdc”

“divergenta”->“adtinveerg”

。。。等等

这是我到目前为止想出的代码。我认为它可以做到这一点,但我认为代码和解决方案有点难看,我不确定它是否是防故障的,是否在每个给定的情况下都能正常工作。我将非常感谢您对这段代码的任何输入,或者您将如何编写此函数的任何示例。我请求你记住我是一个非常优秀的人,所以不要对我太苛刻

string transformer(string input) {

string temp;
int n = 0;
int m = (input.length() -1);

for( int i = 0; i < input.length(); i++) {

    temp += input[m];

    if (input[m] == input[n]) {
        break;
    }

    else {
        temp += input[n];
    }

    n += 1;
    m -= 1;

    if ( temp.length() == input.length() ) {
        break;
    }
}
return temp; }
串变压器(串输入){
字符串温度;
int n=0;
int m=(input.length()-1);
对于(int i=0;i
不幸的是
if(input[m]==input[n])
将确保如果第一个字符和最后一个字符相同,它将在处理第一个字符后立即退出。

不幸的是
if(input[m]==input[n])
将确保如果第一个字符和最后一个字符相同,处理完第一个字符后,它会立即退出。

您有三个问题

用“abbba”试试看。如果结果不是您想要的,则此条件:

if (input[m] == input[n]) {
break;
}
if ( temp.length() == input.length() ) {
  break;
}
这完全是错误的

看看另一个条件:

if (input[m] == input[n]) {
break;
}
if ( temp.length() == input.length() ) {
  break;
}
您一次向
temp
添加两个字符。如果
input
的长度为奇数,该怎么办

假设这是正确的。考虑循环:

for( int i = 0; i < input.length(); i++) {

...

  if ( temp.length() == input.length() ) {
    break;
  }
}

一旦所有这些都正常工作,您应该研究迭代器。

您有三个问题

std::string transformer(const std::string& input) {

    std::string res(input.length(), '0');

    for (int i = 0; i < input.length(); ++i) {
        res[i] = input[ i % 2 == 0 ? input.length() - (i/2) - 1 : (i/2) ];
    }

    return res;
}
用“abbba”试试看。如果结果不是您想要的,则此条件:

if (input[m] == input[n]) {
break;
}
if ( temp.length() == input.length() ) {
  break;
}
这完全是错误的

看看另一个条件:

if (input[m] == input[n]) {
break;
}
if ( temp.length() == input.length() ) {
  break;
}
您一次向
temp
添加两个字符。如果
input
的长度为奇数,该怎么办

假设这是正确的。考虑循环:

for( int i = 0; i < input.length(); i++) {

...

  if ( temp.length() == input.length() ) {
    break;
  }
}
一旦所有这些都正常工作,您应该研究迭代器。

std::string transformer(const std::string&input){
std::string transformer(const std::string& input) {

    std::string res(input.length(), '0');

    for (int i = 0; i < input.length(); ++i) {
        res[i] = input[ i % 2 == 0 ? input.length() - (i/2) - 1 : (i/2) ];
    }

    return res;
}
string res(input.length(),'0'); 对于(int i=0;i
std::string转换器(const std::string&input){
string res(input.length(),'0');
对于(int i=0;i
我会使用
std::string::iterator
std::string::reverse\u iterator

auto it = input.begin();
auto rit = input.rbegin();
std::string temp;

for (size_t i = 0; i < input.length()/2; ++i) {
    temp += *rit++;
    temp += *it++;
}
autoit=input.begin();
auto rit=input.rbegin();
std::字符串温度;
对于(大小i=0;i

处理空长度和奇数长度输入的逻辑留给您去做,不应该太难。(长度为1的输入也是一种特殊情况)

我会使用
std::string::iterator
std::string::reverse\u iterator

auto it = input.begin();
auto rit = input.rbegin();
std::string temp;

for (size_t i = 0; i < input.length()/2; ++i) {
    temp += *rit++;
    temp += *it++;
}
autoit=input.begin();
auto rit=input.rbegin();
std::字符串温度;
对于(大小i=0;i

处理空长度和奇数长度输入的逻辑留给您去做,不应该太难。(输入长度1也是一种特殊情况)

此函数只需将两个索引移向中心,直到它们相遇或通过。最后一个
if
块处理奇数长度输入字符串的情况。它适用于计算机上的所有测试用例

std::字符串转换器(const std::字符串和输入)
{
std::字符串温度;
int i=0;
int j=input.length()-1;
而(i
此函数只需将两个索引移向中心,直到它们相遇或通过。最后一个
if
块处理奇数长度输入字符串的情况。它适用于计算机上的所有测试用例

std::字符串转换器(const std::字符串和输入)
{
std::字符串温度;
int i=0;
int j=input.length()-1;
而(i
我会使用指针而不是索引来完成这项工作

因此,您有一个指针读取边,并在每次迭代中不断交换它们

这也将使它更快

我想这应该行得通,但我不记得如何创建一个const char指针数组。有人能帮我走那一步吗

string transformer(string input) {

     std::string temp;

     const char *front, *back;

     for (*front = input.c_str(), *back = front + input.length() - 1; front < back ; front++, back--) {
        temp += *back;
        temp += *front;
     }

     if (front == back)
        temp += *front;


     return temp;

}
串变压器(串输入){
std::字符串温度;
常量字符*前,*后;
对于(*front=input.c_str(),*back=front+input.length()-1;front

(使用与@blastfurn相同的方法,但跳过不必要的索引。)

我会使用指针而不是索引来完成这项工作

因此,您有一个指针读取边,并在每次迭代中不断交换它们

这也将使它更快

我想这应该行得通,但我不记得如何创建一个const char指针数组。有人能帮我走那一步吗

string transformer(string input) {

     std::string temp;

     const char *front, *back;

     for (*front = input.c_str(), *back = front + input.length() - 1; front < back ; front++, back--) {
        temp += *back;
        temp += *front;
     }

     if (front == back)
        temp += *front;


     return temp;

}
串变压器(串输入){
std::字符串温度;
常量字符*前,*后;
对于(*front=input.c_str(),*back=front+input.length()-1;front