Я хотел бы проверить, эквивалентна ли первая запись предыдущей строки следующей строке.Вот некоторые данные, которые я использую:
Config,Prob,MAN,ATL,CVERT,TVERT,RIB,SCAP,PHUM,DHUM,PRAD,DRAD,CARP,PMC,DMC,PHX
LH,1,2,2,7,13,13,2,2,2,1,1,6,2,2,24
LH,1,0,0,0,0,9,1,2,2,2,2,12,2,2,18
LH,3,0,0,0,0,4,0,0,0,0,0,0,0,0,0
LH,1,0,0,0,13,24,2,2,2,2,2,12,2,2,24
LH,1,0,0,1,13,15,2,0,0,2,2,0,0,0,6
LH,1,0,0,0,0,10,0,1,1,0,0,0,0,0,18
LH,1,0,2,7,3,7,2,2,2,2,2,12,2,2,24
LH,1,0,0,2,0,14,1,2,2,2,2,0,0,0,18
LK,1,0,0,0,0,13,0,0,0,1,1,6,0,0,0
LK,1,2,2,7,13,17,1,0,0,0,0,0,0,0,6
LK,1,0,0,0,10,23,1,1,1,1,1,6,1,1,18
LK,1,2,2,7,0,18,2,0,0,1,1,12,2,2,24
LK,1,0,0,3,0,8,0,0,0,2,2,12,2,2,24
LK,1,2,2,7,0,8,0,0,0,2,2,12,2,2,24
LK,3,2,2,7,13,22,2,2,2,2,2,12,2,2,24
LK,1,2,2,7,0,2,0,0,0,0,0,0,0,0,0
LK,1,2,2,6,0,11,0,2,2,0,0,12,2,2,18
Так что в этом случае я хотел бы подсчитать все времена, когда первая запись строки изменяется.В этих данных это будет эквивалентно двум (От конфигурации до LH, затем от LH до LK).Вот мой попытанный код:
int agents = 0;
int nrows = 0;
char buf[1024];
char *temp;
const char *tok;
while (fgets(buf, 1024, ifp)){
tok = strtok(buf,",");
if(nrows>0){
if(strcmp(temp,tok) != 0){
++agents;
}
}
temp = tok;
nrows++;
}
Моя логика заключалась в том, что мы хотим пропустить первую итерацию, поскольку temp
ничего не содержит, но будет назначен после завершения цикла.При следующем запуске цикла мы получим следующую строку, присвоенную tok
, по сравнению с temp
, в которой есть предыдущая строка.Если они отличаются, увеличивайте, если нет, продолжайте.Назначьте temp
на tok
и повторите снова.Тем не менее, agents
по-прежнему возвращает 0 после цикла.
Поэтому моя логика несовершенна, хотя я не уверен, что это за часть.Спасибо за любую помощь, спасибо.