字符串下标超出范围-字符串冒泡排序

时间:2019-03-22 02:44:39

标签: c++ arrays bubble-sort

第一篇文章在这里,但我一直在寻找解决此错误的方法。 我收到错误消息“字符串下标超出范围”

PhoneBook是一个类Contact对象指针的数组。

static const int maxSize = 10;
Contact* phoneBook[maxSize]; //array of contact pointers

其中“联系人”定义为

class Contact
{
public:
    Contact();

    std::string firstName;
    std::string lastName;
    std::string name; //lName + fName
    std::string phoneNumber;
    std::string address;
};

这是我的气泡排序功能。

void AddressBook::bubbleSort(Contact phoneBook[], int length)
{
Contact temp; 

for (int i = 0; i < length; i++)//for n-1 passes
{
    for (int j = 0; j < length - 1; j++)
    {
        if (phoneBook->name[j] > phoneBook->name[j + 1])
        {
            temp = phoneBook[j];
            phoneBook[j] = phoneBook[j + 1];
            phoneBook[j + 1] = temp;
            }

        }
    }
}

这是addContact

void AddressBook::addContact(std::string fName, std::string lName, std::string pNumber, std::string addr) 
{
    if (isFull())
    {
        std::cout << "Is full" << std::endl;
        return;
    }

    Contact *contact = new Contact;

    contact->firstName = fName;
    contact->lastName = lName;
    contact->name = lName + ", " + fName;
    contact->phoneNumber = pNumber;
    contact->address = addr;

    std::cout << contact->name + " has been added!" << std::endl;
    phoneBook[length] = contact;
    length++; 

    bubbleSort(phoneBook[maxSize], length);

}

最后,在我使用它的地方(source.cpp)

switch (choice) 
{
case 1:
    addrBook.addContact("Ty", "Le", "6191231234", "1234 State Street");
    addrBook.addContact("Zak", "Zachary", "6191231234", "1234 Avenue Drive");

我知道问题出在bubbleSort函数,因为当我从addContact()中注释掉它时,它会很好地工作。

这是我的错误图片 (too long to copy and paste)

完整代码

.h https://pastebin.com/TrtQW8Tc

.cpp https://pastebin.com/EaGBUe9e

来源 https://pastebin.com/1BR5pXZE

1 个答案:

答案 0 :(得分:1)

这几乎是一个错字。代替索引

中的name字符串
    if (phoneBook->name[j] > phoneBook->name[j + 1])

您要索引phonebook

    if (phoneBook[j].name > phoneBook[j + 1].name)