0

我有一个看起来像这样的字符串:

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". 我只是不太确定什么是获得比赛的好方法。我对如何解决这个问题的任何其他想法持开放态度。谢谢

4

2 回答 2

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;
}
于 2010-04-04T05:30:20.727 回答
0

假设您无法修改源字符串,那么我认为您应该查看和的组合strchr()-strrchr()至少,如果您想对所有内容使用库函数。

  • 首先用于strrchr()查找最后一个报价。
  • 然后重复使用strchr()从前面查找引号,直到它返回由 找到的最后一个引号strrchr()
  • 前面的结果和 的结果的组合strrchr()为您提供了您感兴趣的字符串周围的引号。

或者:

  • 首先用于strrchr()查找最后一个报价。
  • 编写一个循环从那里向后搜索以找到前一个引号,记住不要在字符串开头之前搜索,以防它格式错误并且只包含一个引号。

两者都会起作用。根据概率的平衡,循环很有可能会胜过即使是高度优化的strchr()包裹在循环中。

于 2010-04-04T05:16:24.603 回答