Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 按字母顺序排序给定文本,不带附加库_C++_Performance_Sorting_C++11 - Fatal编程技术网

C++ 按字母顺序排序给定文本,不带附加库

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

我的家庭作业是写一个应用程序,按照字母顺序对给定的文本进行排序。为此,我只允许使用“vector”、“string”和“iostream”库

我成功了,但现在遇到了一个奇怪的问题——当我尝试对短文本进行排序时,一切都很好,但对于较长的输入,程序似乎陷入了无限循环或效率问题。如文中所示

"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;indexstd::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