字符串排序功能的逻辑问题或语法问题

问题描述 投票:0回答:1

我是C++和编码的新手。我试图做一个简单的程序,基本上是接收两个词,并告诉你这两个词是否是异形词.我也明白,可能有一个预制的函数来排序一个字符串,像一个数组,但我试图掌握的概念本身,因此,为什么我试图使函数。

下面是我目前所写的代码的一个快速片段。

代码片段

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


#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;
}

c++ function anagram
1个回答
0
投票

补充一下Daniel的回答,在排序函数中不需要临时字符串,只需要处理传递过来的字符串并返回即可。另外也可以考虑支持字母的情况,你可以用 std::transform 从STL algorithm 库。

#include <algorithm>

在你的排序函数中循环之前或在接受输入后,在 main.

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

0
投票

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

你的排序也不太对。 它看起来类似于 选拔赛所以我把它调整为一个变体。 对于字符串中的每一个字符,它都会检查字符串的其余部分,并交换字母,如果后面的字母应该是第一个。

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);
© www.soinside.com 2019 - 2024. All rights reserved.