C++ 按字母顺序排序给定文本,不带附加库
我的家庭作业是写一个应用程序,按照字母顺序对给定的文本进行排序。为此,我只允许使用“vector”、“string”和“iostream”库 我成功了,但现在遇到了一个奇怪的问题——当我尝试对短文本进行排序时,一切都很好,但对于较长的输入,程序似乎陷入了无限循环或效率问题。如文中所示C++ 按字母顺序排序给定文本,不带附加库,c++,performance,sorting,c++11,C++,Performance,Sorting,C++11,我的家庭作业是写一个应用程序,按照字母顺序对给定的文本进行排序。为此,我只允许使用“vector”、“string”和“iostream”库 我成功了,但现在遇到了一个奇怪的问题——当我尝试对短文本进行排序时,一切都很好,但对于较长的输入,程序似乎陷入了无限循环或效率问题。如文中所示 "Albert Einstein 14 March 1879 – 18 April 1955 was a German-born theoretical physicist who developed the th
"Albert Einstein 14 March 1879 – 18 April 1955 was a German-born theoretical physicist who developed the theory of relativity one of the two pillars of modern physics alongside quantum mechanics His work is also known[...]"
在“力学”这个短语出现之前,一切都很好。在添加这个或任何其他单词后,程序将像我前面提到的一样永远运行
恐怕我必须在这种情况下粘贴整个代码(请原谅)
#包括
#包括
#包括
int比较(std::string第一,std::string第二){
int标志=1;
int i;
if(first.size()>word){
text.push_back(word);}
int错误,m=1;
while(m){
错误=0;
对于(int index=1;index std::cout由于while循环无限运行,您错过了一些条件。例如:
如果第一对单词的顺序不正确,则执行while循环的变量的值永远不会变为0。否定的测试用例是:“ball apple”。在这种情况下,代码将无限运行
在您的比较方法中,由于下面的代码行,测试用例如“苹果球”给出了错误的答案。这里的第一个[m]=第二个[m]=l,因此根据您的条件,它将返回false并交换它们。它将用错误的“球”交换“苹果”
int m = second.size() - 1;
if (first[m] == second[m]){
flag = 0;
}
您还需要处理大写和小写单词之间进行比较的情况。例如:“Month Alway”。在这种情况下,答案应该是“Alway Month”。因此,在比较两个字符串之前,您应该将它们置于同一大小写,然后进行比较
数字比较案例,其中1874应该位于18之后。(您可以添加此项)
下面是正确的代码
#包括
#包括
#包括
#包括
int比较(std::string第一,std::string第二){
//这是为了处理两个字母大小写(大写/小写)混合的单词的比较。
//早期解决方案无法比较“月”和“a”
对于(int i=0;i您错过了一些while循环无限运行的条件。例如:
如果第一对单词的顺序不正确,则执行while循环的变量的值永远不会变为0。否定的测试用例是:“ball apple”。在这种情况下,代码将无限运行
在您的比较方法中,由于下面的代码行,测试用例如“苹果球”给出了错误的答案。这里的第一个[m]=第二个[m]=l,因此根据您的条件,它将返回false并交换它们。它将用错误的“球”交换“苹果”
int m = second.size() - 1;
if (first[m] == second[m]){
flag = 0;
}
您还需要处理大写和小写单词之间进行比较的情况。例如:“Month Alway”。在这种情况下,答案应该是“Alway Month”。因此,在比较两个字符串之前,您应该将它们置于同一大小写,然后进行比较
数字比较案例,其中1874应该位于18之后。(您可以添加此项)
下面是正确的代码
#包括
#包括
#包括
#包括
int比较(std::string第一,std::string第二){
//这是为了处理两个字母大小写(大写/小写)混合的单词的比较。
//早期解决方案无法比较“月”和“a”
对于(int i=0;i