排序字符串函数的逻辑问题或语法问题

Logical Issue or Syntax issue with sorting String function

我是 C++ 的新手,一般来说是编码方面的新手。我正在尝试制作一个简单的程序,该程序基本上包含两个单词,并会告诉您这两个单词是字谜还是 not.I 也明白可能有一个预制函数来对字符串进行排序,例如数组然而,我正试图掌握这个概念本身,因此我试图实现这个功能。

这是我目前编写的代码的一小段。

Snippet of code

我目前遇到的问题是,当我调用函数对字符串进行排序时,字符串没有排序!抱歉,如果有一个简单的解决方案,我是相当新的。这是一个逻辑问题还是基于语法?非常感谢!


#include <iostream>
#include <string>
using namespace std;

//Function Declarations
string sortString(string user_input);

//Program Body
int main()
{
    string user_input_one, user_input_two;
    cout << "Welcome to Sandip's Anagram Checker! \nPlease Input two words that you'd like the check!";
    sortString(user_input_one);
    sortString(user_input_two);
    if (user_input_one == user_input_two)
        cout << "These two words are Anagrams of each other!";
    else
        cout << "These are not Anagrams!";
    return 0;
}

//Function Definations
string sortString(string user_input)
{
    string temp_string = user_input;
    int i,j;
    for (i = 0; i<user_input.length();i++)
    {
        for (j=0; j<user_input.length();j++)
        {
            if (user_input[i] == user_input[j])
            {
                temp_string[i] = user_input[j];
            }
            else if (user_input[i] > user_input[j])
            {
                temp_string[i] = user_input[j];
            }
            else if (user_input[i] < user_input[j])
            {
                temp_string[i] = user_input[i];
            }

        }
    }
    return temp_string;
}

有几个问题。您实际上并没有阅读任何用户输入。您可以通过添加 cin >> user_input_one >> user_input_two;.

来解决此问题

您的排序也不太正确。它看起来类似于 selection sort,所以我将其调整为它的变体。对于字符串中的每个字符,它遍历字符串的其余部分并交换字母,如果后面的字母应该在前面的话。

string temp_string = user_input;
    int i, j;
    for (i = 0; i < user_input.length(); i++)
    {
        for (j = i + 1; j < user_input.length(); j++)
        {
            if (temp_string[j] < temp_string[i]) {
                swap(temp_string[i], temp_string[j]);
            }
        }
    }
    return temp_string;

最后,正如@cigien 评论的那样,您没有使用排序后的结果。您可以通过将调用 sortstring() 的行替换为以下内容来更改此设置:

user_input_one = sortString(user_input_one);
user_input_two = sortString(user_input_two);

添加到 Daniel 的答案中,您不需要在排序函数中使用临时字符串,只需处理传递的字符串并 return 即可。还要考虑支持字母大小写,您可以使用 STL algorithm 库中的 std::transform

#include <algorithm>

在循环排序函数之前或在 main 中输入后添加此代码。

transform(user_input.begin(), user_input.end(), user_input.begin(), ::tolower);