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