我有一个看起来像这样的字符串:
long_str = "returns between paragraphs 20102/34.23\" - 9203 1232 \"test\" \"basic HTML\"";
注意:引号是字符串的一部分。
int match(char *long_str){
char * str;
if ((str = strchr(long_str, '"')) != NULL) str++; // last " ?
else return 1;
return 0;
}
使用strstr
我试图获取最后两个引号之间的整个子字符串:"basic HTML"
。我只是不太确定什么是一个好的和有效的方式来获得这场比赛。我对如何处理这个问题的任何其他想法持开放态度。感谢
答案 0 :(得分:1)
#include <stdio.h>
char * long_str =
"returns between paragraphs 20102/34.23\" - 9203 1232 \"test\" \"basic HTML\"";
int main ()
{
char * probe;
char * first_quote = 0;
char * second_quote = 0;
for (probe = long_str; * probe; probe++) {
if (*probe == '"') {
if (first_quote) {
if (second_quote) {
first_quote = second_quote;
second_quote = probe;
} else {
second_quote = probe;
}
} else {
first_quote = probe;
}
}
}
printf ("%s\n", first_quote);
printf ("%d-%d\n", first_quote - long_str, second_quote - long_str);
return 0;
}
答案 1 :(得分:0)
假设您无法修改源字符串,那么我认为您应该查看strchr()
和strrchr()
的组合 - 至少,如果您想将库函数用于所有内容。< / p>
strrchr()
查找最后一个引用。strchr()
从前面查找引号,直到它返回strrchr()
找到的最后一个引号为止。strrchr()
结果的组合为您提供了您感兴趣的字符串的引号。可替换地:
strrchr()
查找最后一个引用。两者都有效。根据概率的平衡,即使循环中包含高度优化的strchr()
,循环也很可能会胜过。