相顧無言,唯有貼代碼,請上眼:
#include <stdio.h>#include <string.h>#include <assert.h>#define STRLEN 256//只是去掉時間標記char *parse_lrc_line(char *line){char *p = NULL;p = strrchr(line,']');if(p == NULL){goto END;}p = p + 1;END:return p;}//在其中解析包含時間標籤的LRC檔案的字串,並輸出到stdout,略微修改即具有實用價值(編碼還是要改的)void parse_lrc_line2(char *line){char *p = NULL;char *right = NULL;char *left = NULL;char buff[STRLEN] = {0};char *p2 = NULL;int n;p = line;//left為左邊的[所在的位置left = strchr(p,'[');if (left == NULL){return ;}//right為右邊的]所在的位置right = strchr(p,']');while(right != NULL && left != NULL){n = right - left - 1;strncpy(buff,left + 1,n);puts(buff);p2 = strrchr(p,']');if (p2 != NULL){p2++;puts(p2);}//可以在這裡儲存歌詞和時間標籤資訊,此時時間標籤為buff,歌詞內容為p2//這裡把buff清空為\0。。反正總歸要清空的,這樣就不用計算字串長度再補\0了memset(buff,'\0',n);p = right;//strchr函數只向後尋找,把這段字串劃分成兩個*p = '\0';p = p + 1;left = strchr(p,'[');if (left == NULL){continue;}right = strchr(p,']');}}int main(){FILE *f = NULL;char line[STRLEN] = {0};f = fopen("qclg.lrc","r");assert(f);while(fgets(line,STRLEN,f)){//parse_lrc_line是去標籤的printf(parse_lrc_line(line));}rewind(f);//讀取每一行,並在其中解析while(fgets(line,STRLEN,f)){//每行解析一次parse_lrc_line2(line);}getchar();fclose(f);}