如何解析C+中分隔符后的部件的疑难解答+;? 刚刚开始学习C++。 我正在尝试读取以下格式的ics文件: BEGIN:VEVENT UID:2179:203860:1:002:1:person DTSTAMP:20170921T080000Z SUMMARY;LANGUAGE=en-ca:BIG CITY LOCATION:CANADA DTSTART;TZID=Eastern Standard Time:20170914T183000 DTEND;TZID=Eastern Standard Time:20170914T203000 RRULE:FREQ=WEEKLY;UNTIL=20171201T235959;BYDAY=TH CLASS:PUBLIC PRIORITY:5 TRANSP:OPAQUE STATUS:CONFIRMED SEQUENCE:0 END:VEVENT

如何解析C+中分隔符后的部件的疑难解答+;? 刚刚开始学习C++。 我正在尝试读取以下格式的ics文件: BEGIN:VEVENT UID:2179:203860:1:002:1:person DTSTAMP:20170921T080000Z SUMMARY;LANGUAGE=en-ca:BIG CITY LOCATION:CANADA DTSTART;TZID=Eastern Standard Time:20170914T183000 DTEND;TZID=Eastern Standard Time:20170914T203000 RRULE:FREQ=WEEKLY;UNTIL=20171201T235959;BYDAY=TH CLASS:PUBLIC PRIORITY:5 TRANSP:OPAQUE STATUS:CONFIRMED SEQUENCE:0 END:VEVENT,c++,icalendar,C++,Icalendar,我所做的是读取每一行并调用一个字符串来查找特定的分隔符,得到它后面的部分,然后将它推到一个向量中。 以下是我读取文件的方法: void SimpleCalendar::initialize(){ int counter = 0; string getLine; ifstream readFile; readFile.open("cal.ics"); if(readFile.fail()){ throw FileException("Error! Cann

我所做的是读取每一行并调用一个字符串来查找特定的分隔符,得到它后面的部分,然后将它推到一个向量中。 以下是我读取文件的方法:

void SimpleCalendar::initialize(){
    int counter = 0;
    string getLine;
    ifstream readFile;
    readFile.open("cal.ics");

if(readFile.fail()){
    throw FileException("Error! Cannot open the file.");
}

while(!readFile.eof()){
    readFile >> getLine;
    size_t summ = getLine.find("SUMMARY;LANGUAGE=en-ca:");
    if (summ != string::npos){
        course.push_back(getLine.substr(summ+1));
        cout << course[counter] << endl;
        counter++;
    }
}
void SimpleCalendar::initialize(){
int计数器=0;
字符串getLine;
ifstream读取文件;
readFile.open(“cal.ics”);
if(readFile.fail()){
抛出FileException(“错误!无法打开文件。”);
}
而(!readFile.eof()){
readFile>>getLine;
size\u t summ=getLine.find(“SUMMARY;LANGUAGE=en-ca:”;
if(summ!=string::npos){
当然,向后推(getLine.substr(summ+1));

cout不要使用
>
,它只读取一个单词(以空格结尾)。使用
getline()
读取整行

find()
返回匹配开始的索引,而不是结束的索引。调用
substr()
时,需要添加要跳过的字符串长度

while(readFile.getline(getline)){
size\u t summ=getLine.find(“SUMMARY;LANGUAGE=en-ca:”;
if(summ!=string::npos){
course.push_back(getLine.substr(summ+sizeof“SUMMARY;LANGUAGE=en-ca:”);

cout不要使用
>
,它只读取一个单词(以空格结尾)。使用
getline()
读取整行

find()
返回匹配开始的索引,而不是结束的索引。调用
substr()
时,需要添加要跳过的字符串长度

while(readFile.getline(getline)){
size\u t summ=getLine.find(“SUMMARY;LANGUAGE=en-ca:”;
if(summ!=string::npos){
course.push_back(getLine.substr(summ+sizeof“SUMMARY;LANGUAGE=en-ca:”);

cout此外,请注意,使用中描述的折叠机制,属性值可能跨越多行

换句话说,一个长的摘要将表示为

SUMMARY:bla bla bla...
 continuation of bla bla bla

此外,请注意,使用中所述的折叠机制,属性值可能跨越多行

换句话说,一个长的摘要将表示为

SUMMARY:bla bla bla...
 continuation of bla bla bla

谢谢!我只是想确认下一行的内容,比如“地点”:。我是否需要用另一个分隔符执行另一个if语句?是的,尽管您可能希望设计更通用的语句。例如,在行中查找第一个
,获取前面的单词,然后使用字符串
if/else if/
根据不同的前缀字符串对其进行测试。谢谢!只想确认一下m我怎样才能得到下一行,比如“地点”:。我是否需要使用另一个分隔符执行另一个if语句?是的,尽管您可能希望设计更通用的语句。例如,在行中查找第一个
,获取前面的单词,然后使用
if/else if/
字符串对不同的前缀字符串进行测试。