Я довольно новичок в кодировании и застрял с проблемой.Я пытался решить это сам и много гуглил, но у меня до сих пор нет решения этой проблемы.Может быть, один из вас может помочь?
Это мой код:
int main(int argc, char **argv) {
struct node {
char *str;
int count;
struct node *next;
};
struct node head = { argv[1], 1, NULL };
for (int i = 2; i < (argc); i++) {
for (struct node *p = &head; (p != NULL); p = p->next) {
printf("%s,%s\n", argv[i], p->str);
if (strcmp(argv[i], p->str) == 0) {
printf("case1\n");
p->count++;
break;
}
else if ((strcmp(argv[i], p->str) != 0) && p->next) {
printf("case2\n");
printf("Adresse, auf die p zeigt: %p", &p);
continue;
}
else if ((strcmp(argv[i], p->str) != 0) && (!p->next)) {
printf("case3\n");
struct node *oldhead = &head;
head.str = argv[i];
head.count = 1;
head.next = oldhead;
break;
}
}
}
// Print how many times each string appears
return 0;
}
Цель состоит в том, чтобы создать связанный список, содержащий все аргументы, которые я дал main()
при вызове программы.Если есть дубликаты, структура должна их посчитать.Например, если я вызываю программу наподобие ./a.out foo fool foo
, результатом должен быть список длины два, где первый элемент содержит строку "foo"
и число 2
, а второй элемент содержит строку "fool"
и имеетколичество 1
.Проблема в том, что else if
-состояние внутри внутреннего цикла for.Это единственная часть, где должен фактически использоваться внутренний цикл for и присваивать p->next
p
.К сожалению, этого не происходит.В результате внутренний цикл for запускается снова и снова, и указатель p постоянно указывает на один и тот же адрес (я использовал printf, чтобы выяснить это).
Кто-нибудь из вас имеет представление, в чем может быть проблема здесь?Я перепробовал все, что мог, и попытался найти решение онлайн ...
Большое спасибо !!!