排序字符串函数的逻辑问题或语法问题
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);
我是 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);