C++ 分析歌词LRC文件
初学C++,练习
#include "stdafx.h"#include <iostream>#include <fstream>using namespace std;void readLyric(string fileName);void analysisOneLine(string str,int lNum);void printLyric();void getLyricHeader(string str);struct OneLineLyric{int lineNum;string startTime;string endTime;string lyricContent;};string header[]={"ai:","ar:","al:","by:"};int lineNum=0;OneLineLyric lyric[100]; //动态分配最好string Lheader[4];void readLyric(string fileName){ifstream fin;fin.open(fileName);if(!fin.is_open()) {cerr<<"文件读取失败!\n";exit(0);}string str;getline(fin,str);while(fin){getline(fin,str);//cout<<"行号:"<<lineNum++<<"内容:\n"<<str<<endl;if(str!=""){analysisOneLine(str,lineNum); lineNum++;}}fin.close();printLyric();}//分析一行 保存到结构体数组void analysisOneLine(string str,int lNum){if(str[0]!='['){cout<<"歌词文件格式不正规!\n";}//歌词说明 ti:歌曲名称 ar:演唱者 al: by: 制作单位getLyricHeader(str);//一般的歌词for(int i=1;i<str.length()-1;i++){if(str[i]==']'){lyric[lNum].lineNum=lNum;lyric[lNum].startTime=str.substr(1,i-1);lyric[lNum].lyricContent=str.substr(i+1,str.length()-1);if(lNum-1>=0)lyric[lNum-1].endTime=lyric[lNum].startTime;}}}void getLyricHeader(string str){for(int i=0;i<4;i++){if(header[i]==str.substr(1,3)){Lheader[i]=str;}}}void printLyric(){cout<<"歌曲信息:"<<endl;for(int i=0;i<4;i++){cout<<Lheader[i]<<endl;}for(int i=0;i<lineNum;i++){if(lyric[i].startTime!=""){cout<<"行 号:\t"<<lyric[i].lineNum<<endl;cout<<"开始时间:\t"<<lyric[i].startTime<<endl;cout<<"结束时间:\t"<<lyric[i].endTime<<endl;cout<<"歌词内容:\t"<<lyric[i].lyricContent<<endl;cout<<endl;}}}
- 1楼Wentasy昨天 18:58
- 学习了,加油!
- Re: xiaowall昨天 19:21
- 回复Wentasy谢啦,一起加油!