【问题标题】:I need help swapping this string [closed]我需要帮助交换这个字符串[关闭]
【发布时间】:2021-12-13 23:01:06
【问题描述】:
#include <iostream>

using namespace std;

int main()
{
    string sentence;
    string output;
    string product1;
    string product2;
    char pr1;
    string product;
    
    int i;
    getline (cin,sentence);
    char pr2;
    
    cin >> pr1;
    cin >> pr2;
    
    for (i=0; i < sentence.length();i++){
        
        pr1 = sentence[i]; //asdfg---> g
        pr2 = sentence[0]; //--> a 
    }
    
    output += pr1+sentence+pr2;

    cout << output;
    return 0;
}

此代码用于交换字母,但例如当我输入asdfg 时,我得到gaasdfga。当我输入时,我想交换ga。知道我应该怎么做吗?知道出了什么问题,以及如何改进吗?

【问题讨论】:

  • 将所有对sentence的修改替换为std::reverse(sentence.begin(), sentence.end());从标准输入读取字符串,并简单地打印sentence而不是其他内容?
  • 你应该真正解释你想要做什么。如果标准输入是nbvcx⏎qw,你期望得到什么?如果是aaaaabbbbb⏎ab
  • 如果我以某种方式误解了这个问题,请通过在问题中添加一些示例输入和预期输出来澄清。

标签: c++ string loops swap


【解决方案1】:

下面将新值分配给pr1pr2。您输入的字符将会丢失。

    pr1 = sentence[i]; //asdfg---> g
    pr2 = sentence[0]; //--> a 

要交换两个输入字符中的第一个,请使用std::string::find,然后使用std::swap

例子:

#include <utility>
#include <string>
#include <iostream>

int main() {
    std::string sentence = "asdfg";

    char pr1 = 'g';
    char pr2 = 'a';

    auto pos1 = sentence.find(pr1);
    auto pos2 = sentence.find(pr2);

    if(pos1 != sentence.npos && pos2 != sentence.npos) {
        std::swap(sentence[pos1], sentence[pos2]);
    }

    std::cout << sentence << '\n';
}

输出:

gsdfa

std::swap(sentence[pos1], sentence[pos2]); 的替代方法是手动进行交换:

char temp = sentence[pos1];
sentence[pos1] = sentence[pos2];
sentence[pos2] = temp;

或通过用户定义的 swapper 函数调用,就像调用 std::swap 一样:

template<class T>
void swapper(T& lhs, T& rhs) {
    // move construct a temporary variable from the argument on the
    // left hand side
    T temp = std::move(lhs);

    // move assign the left hand side from the right hand side
    lhs = std::move(rhs);

    // move assign the right hand side from the temporary variable
    rhs = std::move(temp);
}

【讨论】:

  • 知道如何手动完成,因为这是他们希望我在大学里做的事情
  • @Jasmine 当然。您熟悉模板还是更喜欢非模板解决方案?也许您可以更新问题以提供更多详细信息,我们可以重新打开它。
  • 我更喜欢一个简单易懂的解决方案,请我在 intrenet 上找到的大多数东西要么使用功能,要么太复杂,所以介意告诉我在哪里可以找到简单的东西吗?
  • @Jasmine 我明白了。我刚刚添加的替代方案有帮助吗?
  • 喜欢一个易于理解的模板解决方案会非常有帮助,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多