分段错误(core dumped)错误排序字符串数组

时间:2016-04-06 21:41:21

标签: c++ arrays string sorting

我应该编写一个代码,使用预先设置的名称将名称按字母顺序排列,这是我到目前为止所拥有的:

#include <iostream>
#include <iomanip>
#include <string>

using namespace std;

int main ()

{

const int NUM_NAMES = 20;
string temp;                        
string names [NUM_NAMES] = {"Collins, Phil", "Simpson, Bart", "Allen, Jim",
                            "Griffen, Jim", "Stamey, Marty" "Rose, Geri",
                            "Taylor, Swift","Johnson, Jill", "Alison, Jeff",
                            "Looney, Joe", "Wolfe, Bill", "James, Jean", 
                            "Weaver, Jim", "Pore, Bob", "Rutherford, Greg",
                            "Ravens, Renee", "Harrison, Rose", "Setzer, Cathy",
                            "Pike, Gordon", "Holland, Beth" }; 


for (int k=0; k < NUM_NAMES; k++ )
{     for (int i=0; i<NUM_NAMES; i++)
      {
           if ( names[i] > names [i+1])
              {
                temp = names[i];
                names [i] = names[i + 1];
                names [i + 1] = temp;
              }

      }

}
cout << names [0] << endl;

int k = 1;
int  i = 0;
while (k <= NUM_NAMES)
{
      cout << names [i] << endl;
k++;
i++;
}


return 0;
}

它编译时没有错误但是当我尝试运行它时出现“Segmentation Fault(core dumped)”...正确方向的任何帮助都将受到赞赏

1 个答案:

答案 0 :(得分:0)

你正在覆盖不属于你的记忆 - 在这一行:

names [i+1] = ...

在C ++(和许多其他语言)中,数组是从0索引的。因此,大小为N的数组对于从0N-1的索引有效。您的for循环遍历0 ... NUM_NAMES - 1,但在内部,您使用的索引i+1为最后一次迭代NUM_NAMES

要解决此问题,您可以遍历1 ... NUM_NAMES - 1

for (int k=1; k < NUM_NAMES; k++ )

继续names[i-1]names[i]

if ( names[i-1] > names [i])
{
    temp = names[i - 1];
    names [i - 1] = names[i];
    names [i] = temp;
}

(或者保持现状,但将循环的执行条件更改为k < NUM_NAMES - 1

此外,而不是:

temp = names[i];
names [i] = names[i + 1];
names [i + 1] = temp;

你可以这样做:

std::swap(names[i], names[i + 1]);
相关问题