У меня есть динамически выделяемый 2D массив строк, которые выглядят так:Получение столбцов из двумерного динамически распределенного массива?
2152,1,MAIN,AAST,2337,1,26873,LEC - Lecture,5,5,0,0,0,Ronnie W Liggett,[email protected],COBA,348,9:00 AM,9:50 AM,Y,N,Y,N,Y,N,N,1/20/2015,5/8/2015
2152,1,MAIN,AAST,4391,1,26881,IND - Independent Study,1,5,4,0,0,Schnavia S Hatcher,[email protected],,,,,N,N,N,N,N,N,N,1/20/2015,5/8/2015
2152,1,MAIN,AAST,3339,1,29501,LEC - Lecture,5,5,0,0,0,Krystal K Beamon,[email protected],UH,104,11:00 AM,12:20 PM,N,Y,N,Y,N,N,N,1/20/2015,5/8/2015
2152,1,MAIN,ACCT,3309,6,27298,LEC - Lecture,59,59,0,0,0,Terra C Mcghee,[email protected],COBA,256,9:00 AM,11:50 AM,N,N,N,N,Y,N,N,1/20/2015,5/8/2015
Все 1000 строк являются пузырьковой сортировки в алфавитном порядке по их предметам (это четвертый столбец, AAST и АККТ в приведенном выше примере). Мне нужно напечатать общую регистрацию для каждого предмета, которая является 9-м столбцом (5, 1, 5, 59 в этом примере). Код у меня ниже:
for(i=0;i<count;i++)
{
total = 0;
strcpy(currentLine, addresses[i]);
currentSubject = getSubject(currentLine);
for(i;i<count;i++)
{
printf("%d\n", i);
strcpy(nextLine, addresses[i]);
nextSubject = getSubject(nextLine);
if(strcmp(currentSubject, nextSubject) == 0)
{
strcpy(nextLine, addresses[i]);
enrollment = getEnrollment(nextLine);
total += enrollment;
}
else
{
printf("%s %d\n", currentSubject, total);
break;
}
}
}
где:
- адреса является 2D массив, который содержит все 1000 строк
- getSubject() извлекает четвертый столбец с помощью strtok()
- getEnrollment() извлекает столбец регистрации с помощью strtok()
- count равно количеству строк в файле, которое равно 999 (первая строка - это строка заголовка, которая не учитывается (
Я продолжаю использовать strcpy(), чтобы избежать повреждения исходной строки из-за strok(). Однако, эта логика, кажется, не работает, потому что мои итоги отображаются в виде:
AAST 11
ACCT 193
ADVT 12
соответствующих строк (я удалил всю бесполезную информацию так, что легче читать) являются:
AAST,5
AAST,1
AAST,5
ACCT,59
ACCT,26
ACCT,34
ACCT,37
ACCT,18
ACCT,59
ACCT,19
ADVT,136
ADVT,12
Похоже, что для ACCT второе значение последнего (59) не добавилось, а также для ADVT, второе и последнее значение (136) также не добавилось. Что случилось с моей логикой?
не используйте 'strtok'. Для 'getSubject()' и друзей это противоречит интуиции и ошибкам, чтобы изменить строковый аргумент. – chqrlie