char *tmp = strdup(wholeProgramStr); /* makes a copy to be writeable */
char *pch;
char *pch2;
pch = strstr(tmp, "/*"); /* pointer to first occurrence */
if (pch) { /* founded */
pch += 2; /* skip "/*" */
pch2 = strstr(pch, "*/"); /* pointer to second occurrence */
if (pch2) { /* founded */
*pch2 = '\0'; /* cut */
printf("%s\n", pch);
}
}
正如@alk指出,沒有必要重複的字符串,如果你只需要打印結果:
char *pch;
char *pch2;
pch = strstr(wholeProgramStr, "/*"); /* pointer to first occurrence */
if (pch) { /* founded */
pch += 2; /* skip "/*" */
pch2 = strstr(pch, "*/"); /* pointer to second occurrence */
if (pch2) { /* founded */
printf("%*s\n", pch2 - pch, pch));
}
}
編輯:
將如何我再次運行它,直到它到達字符串的末尾?那麼 它可以找到多個評論?
循環,直到你不找兩個分隔符:
char *tmp = wholeProgramStr;
char *pch;
while (1) {
pch = strstr(tmp, "/*"); /* pointer to first occurrence */
if (pch) { /* founded */
pch += 2; // skip "/*"
tmp = strstr(pch, "*/"); /* pointer to second occurrence */
if (tmp) { /* founded */
printf("%*s\n", tmp - pch, pch));
tmp += 2; // skip "*/"
} else break;
} else break;
}
您的想法使用'strstr'基本上是好的。你想怎麼處理找到的字符串?你想處理(例如打印)它嗎,你想從原始字符串中刪除它嗎?你可以修改原始字符串(如'strtok')來在註釋之後放置一個終止的空字符嗎?分隔符是否應該包含在找到的字符串中? – 2014-11-08 09:34:09
我基本上需要採取字符串,並能夠計算使用它的字符數量,排除/ * * /。我無法修改輸入。謝謝 – JamesDonnelly 2014-11-08 10:01:15
好的,那麼'pch2 - (pch + 2)'會給你答案,其中'2'是起始分隔符'/ *'或'//'的字符串長度。 (你可能應該在'pch + 2'開始搜索'pch2',以便趕上退化的註釋'/ * /',並檢查它們是否存在,否則你可以通過'NULL'到第二個'strstr '。) – 2014-11-08 10:07:15