我知道有一些快速的字符串搜索算法,比如Boyer–Moore和Knuth–Morris–Pratt,它们的复杂度为 O(n+m),而简单的解决方案是 O(n*m)。
那么,最流行的工具链(gcc 和 Visual Studio)的 strstr() 实现是使用这些快速 O(n) 算法,还是使用简单的解决方案?
PHP是我定期使用的那种语言之一,但是当我再次开始使用它时,通常不得不关闭蜘蛛网.本周同样适用于我将一些C代码移植到PHP.这使用了大量的AES加密和SHA256散列 - 到目前为止一切正常.但是,解密的字符串以"C"形式出现 - 即以零字节后跟"垃圾"填充字节终止.
我目前使用以下内容将这些C风格的字符串"修剪"为PHP表单:
$iv = strpos( $hashsalt8, "\0");
if ($iv)
$hashsalt8 = substr( $hashsalt8, 0, $iv );
Run Code Online (Sandbox Code Playgroud)
似乎啰嗦而且应该有一个单行函数调用,但我找不到它?
注意:虽然在这种情况下"哈希盐"名称意味着我可能知道原始字符串的长度,但在一般情况下这是未知的.显然,substr()当先验已知长度时,可以使用单线解决方案.
通过一堆线程去后,我知道我需要使用regex.h使用在C&C++的正则表达式.
但我想知道,是否有更简单的方法来搜索字符串中"/"或"\"的出现.
// I have a strstr statement like this -
str = strstr(s, "/");
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以更改它,以便我可以搜索第一次出现
/ 或 \在一次调用strstr.
该程序没有给出任何输出......如果输入匹配的字符串,函数find_track应返回该轨道.
#include<stdio.h>
#include<string.h>
char tracks[][80] = {
"I left my heart in Harward Med School",
"Newark, Newark - a wonderful town",
"Dancing with a Dork",
"From here to maternity",
"The girl from Iwo Jima",
};
void find_track(char search_for[])
{
int i;
for(i = 0; i< 5 ; i++)
{
if(strstr(tracks[i],search_for))
{
printf("Track %i: '%s'\n",i,tracks[i]);
}
}
}
int main()
{
char search_for[80];
printf("Search for : ");
fgets(search_for,80,stdin);
find_track(search_for);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我想看看是否.[dot]是否存在于字符串中.
我试过strstr但它返回false.
这是我的代码: -
<?php
$str = strpos("true.story.bro", '.');
if($str === true)
{
echo "OK";
} else {
echo "No";
}
?>
Run Code Online (Sandbox Code Playgroud)
我想看看'.' 是否存在字符串,我可以做爆炸,但我想做一行,我怎么能这样做?
谢谢
我正在尝试在字符串中找到子字符串的位置.
#include <string.h>
#include <stdio.h>
void find_str(char const* str, char const* substr)
{
char* pos = strstr(str, substr);
if(pos) {
printf("found the string '%s' in '%s' at position: %d\n", substr, str, pos - str);
} else {
printf("the string '%s' was not found in '%s'\n", substr, str);
}
}
int main(int argc, char* argv[])
{
char* str = "gdeasegrfdtyguh?johh?hugfydsasdrfgthyjkjhghh";
find_str(str, "hh");
find_str("dhenhheme kekekeke hhtttttttttttttttttttttttttttttttttttttttthhtttttttttttt", "hh");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
在'gdeasegrfdtyguhıjohhıhugfydsasdrfgthyjkjhghh'中找到了字符串'hh',位置:19
在'dhenhheme kekekeke hhttttttttttttttttttttttttttttttttttttttttttttttttthtttttttttttttt'中找到字符串'hh',位置:4
在第一个例子中,它表示它处于第19位.但是它不应该说是18吗?因为在第二个例子中它表示4.它从子串的开头开始.
我糊涂了.
我希望获得与 php strstr 命令相同的确切结果(当它设置为 true 时),但顺序相反。
我知道我可以简单地反转字符串并使用 strstr 然后再次反转它
但我想知道该任务是否有任何内部 php 命令。
<?php
$myString = 'We don\'t need no education';
echo strstr($myString, ' ', true);
/*
* output :
* We
*
* I'm expecting to get :
* education
*
*/
exit;
?>
Run Code Online (Sandbox Code Playgroud)
很简单 !
我希望在针发生之后得到字符串的第一位...
$user = strstr('someemail@yahoo.com', '@', true);
Run Code Online (Sandbox Code Playgroud)
但这只适用于PHP版本5.3.0,我有5.2.9有没有办法可以获得相同的结果?
我在wordpres中使用帖子GUID构建了一个导航菜单,并且发布标题,我只占用了标题的一部分并且这样做我正在执行以下操作,
$casestudylist .= "<li class='subnav'><a href=".$v->guid.">". strstr($v->post_title, ":", true)."</a></li>";
Run Code Online (Sandbox Code Playgroud)
但是我收到以下警告并且无法解决原因:
wrong parameter count for strstr()
Run Code Online (Sandbox Code Playgroud)
基本上我试图从字符串中拉出所有字符,如果它们在a之前:.
我正在将一个与Ubuntu 8.04(gcc版本4.2.4)配合使用的程序移植到10.04(gcc版本4.4.3).我有以下代码:
#include <stdio.h>
#include <string.h>
int main(void) {
char p[100] = "////abcd";
char *t;
/* Remove duplicate slashes, saving only one of them */
while (t = strstr(p, "//"))
strcpy(t, t + 1);
printf("%s\n", p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
结果应该/abcd是gcc 4.2.4.使用4.4.3,输出为/accd.
你能否建议我使用两种版本的gcc来提供正确的输出代码,并且最好解释一下这里发生了什么.
提前致谢!