Как сравнить строки в массиве структур? - PullRequest
0 голосов
/ 23 ноября 2018

Я пытаюсь сравнить строки, полученные из struct Array, и пытаюсь проверить, равны ли они обе, прежде чем я их распечатаю.

        int index;

        for (int i = 0; strlen((cityArr+i)->cityname) != 0; i++) {
            for (int j = 0; strlen((cityArr+j)->cityname) != 0; j++) {
                if (strcmp(cityArr[i].cityname, cityArr[j].cityname) == 0) {
                    index = i;
                }
            }
        }

        printf("%s\n", cityArr[index].cityname);

Итак, имеющаяся у меня информация означает, что я должен просто напечатать дубликат, верно?

Тем не менее, мой вывод: Сан-Хосе, Форт-Уэрт, Сан-Диего, Питтсбург, Омаха, Стоктон, Остин, Нью-Йорк, КорпусКристи Форт-Уэрт

Я считаю, что единственный город, который должен быть напечатан, - это Форт-Уэрт, а не все города (как здесь).

Кто-то определил мой вопрос как дубликат - яПрочитайте тему, но я немного понимаю, как работает strcmp.strcmp возвращает значение 0, если строки равны, но здесь я пытаюсь распечатать одинаковые названия городов, но вместо этого он печатает каждый город в массиве, над которым я работаю.

1 Ответ

0 голосов
/ 23 ноября 2018

То, что вы делаете, хорошо, но вы упускаете одну вещь, когда i будет равно j.Чтобы решить эту проблему, вы можете просто сделать следующее:

int index;

for (int i = 0; strlen((cityArr+i)->cityname) != 0; i++) {
    for (int j = 0; strlen((cityArr+j)->cityname) != 0; j++) {
        if (i == j) {
            continue;
        }
        if (strcmp(cityArr[i].cityname, cityArr[j].cityname) == 0) {
            index = i;
        }
    }
}

printf("%s\n", cityArr[index].cityname);

При этом, если i равно j, второе значение for перейдет к следующей итерации без проверки, совпадают ли названия городов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...