我是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;
}
补充一下Daniel的回答,在排序函数中不需要临时字符串,只需要处理传递过来的字符串并返回即可。另外也可以考虑支持字母的情况,你可以用 std::transform 从STL algorithm
库。
#include <algorithm>
在你的排序函数中循环之前或在接受输入后,在 main
.
transform(user_input.begin(), user_input.end(), user_input.begin(), ::tolower);
有几个问题。 你实际上没有读取任何用户输入。 你可以通过添加 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);