【问题标题】:Logical Issue or Syntax issue with sorting String function排序字符串函数的逻辑问题或语法问题
【发布时间】:2020-08-24 14:00:45
【问题描述】:

我是 C++ 和一般编码的新手。我正在尝试制作一个简单的程序,该程序基本上包含两个单词,并会告诉您这两个单词是否是字谜。我也知道可能有一个预先制作的函数来对字符串进行排序,例如数组但是我我试图掌握这个概念本身,因此我为什么要尝试制作这个功能。

这是我目前编写的代码的快速 sn-p。

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

【问题讨论】:

  • 请将代码发布为文本,而不是图像。
  • 如果是语法问题,编译器会告诉你。
  • 我的错!这是代码,应该更新主线程。
  • 你想实现什么排序算法?我不认识它。
  • 即使您的sortString 函数有效,您也没有使用从它返回的值。

标签: c++ function anagram


【解决方案1】:

补充丹尼尔的回答,排序函数中不需要临时字符串,只需处理传递的字符串并返回即可。还要考虑支持字母大小写,您可以使用 STL algorithm 库中的 std::transform

#include <algorithm>

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

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

【讨论】:

  • 谢谢!我会在以后的项目中记住这一点!
【解决方案2】:

有几个问题。您实际上并没有阅读任何用户输入。您可以通过添加 cin &gt;&gt; user_input_one &gt;&gt; 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);

【讨论】:

  • 是的!有道理,非常感谢。我知道没有任何用户输入,但那是因为我试图弄清楚如何解决 VSCode 的仅输出终端,并更改 CodeRunner 上的设置。不过谢谢你,会实现这个!我很感激。我也不知道交换函数,我试图手动复制它,因此可能导致问题和 sortString 函数的清晰度。
猜你喜欢
  • 2021-12-21
  • 2013-11-16
  • 1970-01-01
  • 1970-01-01
  • 2012-07-11
  • 1970-01-01
  • 2013-07-26
  • 2010-10-08
  • 1970-01-01
相关资源
最近更新 更多