标签: strstr

哪种方法首选strstr或strpos?

我注意到很多开发人员正在使用strstr和strpos来检查子字符串是否存在.他们中的一个是首选,为什么?

php strstr strpos

77
推荐指数
3
解决办法
4万
查看次数

在PHP中获取字符串的第一行

在PHP 5.3中有一个很好的功能,似乎做我想要的:

strstr(input,"\n",true)
Run Code Online (Sandbox Code Playgroud)

不幸的是,服务器运行PHP 5.2.17并且可选的第三个参数strstr不可用.有没有办法在以前的版本中实现这一点?

php string newline strstr

38
推荐指数
3
解决办法
3万
查看次数

strstr比算法快?

我有一个21056字节的文件.

我在C中编写了一个程序,将整个文件读入缓冲区,然后使用多个搜索算法在文件中搜索82个字符的标记.

我已经使用了"精确字符串匹配算法"页面中所有算法的实现.我用过:KMP,BM,TBM和Horspool.然后我使用strstr并对每一个进行基准测试.

我想知道的是,每次strstr优于所有其他算法.有时候唯一更快的是BM.

strstr应该是最慢的?

这是我的基准代码,其中包含基准测试BM的示例:

double get_time()
{
    LARGE_INTEGER t, f;
    QueryPerformanceCounter(&t);
    QueryPerformanceFrequency(&f);
    return (double)t.QuadPart/(double)f.QuadPart;
}
Run Code Online (Sandbox Code Playgroud)
before = get_time();
BM(token, strlen(token), buffer, len);
after = get_time();
printf("Time: %f\n\n", after - before);
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释为什么strstr表现优于其他搜索算法吗?如果需要,我会根据请求发布更多代码.

c algorithm performance string-matching strstr

16
推荐指数
2
解决办法
1万
查看次数

为什么这个调用strstr不返回false?

我在旧的遗留代码库中偶然发现了strstr的问题.有很多代码,但基本上测试用例将归结为:

$value = 2660;
$link = 'affiliateid=1449&zoneid=6011&placement_id=11736&publisher_id=1449&period_preset=yesterday&period_start=2017-03-27&period_end=2017-03-27';

var_dump(strstr($link, $value));
Run Code Online (Sandbox Code Playgroud)

我希望这会返回,false因为"2660"不在字符串中,但它返回d=1449&zoneid=6011&placement_id=11736&publisher_id=1449&period_preset=yesterday&period_start=2017-03-27&period_end=2017-03-27.

我意识到这$value应该是一个字符串,但我仍然不明白为什么它没有被PHP转换成字符串,为什么它在链接中找到这个数字.

实际上,如果我尝试使用$value = '2660';它会false按预期返回.

知道发生了什么事吗?

php string casting strstr

16
推荐指数
2
解决办法
1749
查看次数

strstr的优化版本(搜索具有恒定长度)

我的C程序有很多strstr函数调用.标准库strstr已经很快但在我的情况下搜索字符串总是长度为5个字符.我用特殊版本替换它以获得一些速度:

int strstr5(const char *cs, const char *ct)
{
    while (cs[4]) {

        if (cs[0] == ct[0] && cs[1] == ct[1] && cs[2] == ct[2] && cs[3] == ct[3] && cs[4] == ct[4])
            return 1;

        cs++;
    }

    return 0;
}

该函数返回一个整数,因为它足以知道ct中是否出现ct.在这种特殊情况下,我的功能比标准的strstr简单快捷,但我很想知道是否有人可以应用一些性能改进.即使是小改进也是受欢迎的

摘要:

  • cs的长度> = 10,否则它可能会有所不同.之前已知长度(未在我的函数中使用).cs的长度通常为100至200.
  • ct的长度为5
  • 字符串的内容可以是任何内容

编辑:感谢您的所有答案和评论.我必须研究和测试想法,看看什么是最好的.我将从MAK关于后缀trie的想法开始.

c strstr

13
推荐指数
3
解决办法
8091
查看次数

一个纯字节版本的strstr?

是否有一个版本的strstr在固定长度的内存上工作,可能包含空字符?

我可以像这样说出我的问题:strncpy是memcpy,因为strstr是?

c strstr

12
推荐指数
2
解决办法
3968
查看次数

JavaScript或jQuery相当于PHP的strstr()函数

在jQuery或JavaScript中是否有与strstr()PHP 相同的功能?

我有一个AJAX响应应该是1,2,3,12,13,23或123.我想检查1是否存在,然后如果2存在则则存在3.

javascript jquery strstr

10
推荐指数
2
解决办法
3万
查看次数

实现strnstr

我试图将strnstr函数实现为C(strstr,但它会检查长度),由于某种原因它不起作用(输出始终为no):

#include <stdio.h>

char *searchingFor = "stackdummy";
char *in = "la da\ndoo a da\nnow here comes the stack\nok there it was.\n";

char *strnstr(char *s1, char *s2, int length) {
    if(s1 == NULL || s2 == NULL) return NULL;
    printf("searching \n\n\"%s\"\n for %.*s\n", s1, length, s2);
    char *ss1 = malloc(strlen(s1) + 1);
    strcpy(ss1, s1);
    char *ss2 = malloc(length + 1);
    strncpy(ss2, s2, length);
    char *result = strstr(ss1, ss2);
    free(ss1);
    free(ss2);
    return result;
}

int main(void) {
    printf("found: %s\n", strnstr(in, searchingFor, 5) …
Run Code Online (Sandbox Code Playgroud)

c string strstr

10
推荐指数
1
解决办法
1万
查看次数

模糊DISTINCT值

我有一个房地产列表数据库,需要返回一个社区列表.现在我正在使用mysql DISTINCT,它返回所有不同的值.我的疑问是,有很多社区有相似的名字:例如:

Park View Sub 1
Park View
Park View Sub 2
Park View Sub 3
Great Lake Sub 1
Great Lake Sub 2
Great Lake 
Great Lake Sub 3
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个简单的php或mysql解决方案,它会认识到"Park View"和"Great Lake"已经存在并且只返回"Park View"和"Great Lake".

我最初的想法是一些如何按长度获得排序顺序,以便短值在顶部,然后循环使用strstr.这听起来像一个大任务,我想知道是否有一个功能,无论是在mysql还是php,都可以很容易地做到这一点.

php mysql loops distinct strstr

8
推荐指数
1
解决办法
290
查看次数

在C中查找字符串中子字符串的位置

这是一个接受的程序:

  1. 来自用户的句子.
  2. 用户的话.

如何找到句子中输入单词的位置?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char sntnc[50], word[50], *ptr[50];
    int pos;
    puts("\nEnter a sentence");
    gets(sntnc);
    fflush(stdin);
    puts("\nEnter a word");
    gets(word);
    fflush(stdin);
    ptr=strstr(sntnc,word);

    //how do I find out at what position the word occurs in the sentence?

    //Following is the required output
    printf("The word starts at position #%d", pos);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c string substring strstr

7
推荐指数
2
解决办法
6万
查看次数