Tag: strstr

strstr找不到子字符串但缓冲区包含值

我正在尝试使用STM32F407V6T6和CubeMx UART 。 我的UART工作正常。 我在比较缓冲区时遇到的问题:我使用strstr()来检查我的缓冲区是否包含有效的子字符串。 这是代码: uint8_t buff[10]; int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART2_UART_Init(); Green_Blink(100); Orange_Blink(100); Blue_Blink(100); Red_Blink(100); __HAL_UART_ENABLE_IT(&huart2, UART_IT_TC); __HAL_UART_ENABLE_IT(&huart2, UART_IT_RXNE); HAL_Delay(1000); while (1) { HAL_UART_Transmit_IT(&huart2, (uint8_t *)”AT\r\n”, 5); Orange_Blink(100); HAL_Delay(1000); HAL_UART_Receive_IT(&huart2, buff, 10); buff[9] = ‘\0’; if (buff[6] == ‘O’ && buff[7] == ‘K’) { Green_Blink(1000); //Blinks } if (strstr((char*)buff, “OK”)) { […]

struct array中的strstr char数组

我有一个结构定义为; struct player { int no, age; char name[20]; } players[10]; 数组从文件中填充。 我尝试做的是,从用户获取输入,将输入添加到char数组,将其发送到循环中的search(char lookup [])函数和strstr name字段。 EDİT:对不起,我更正了订单。 我正试图在一个循环中strstr。 char *p = strstr(players[x].name, inputFromUser); 但是p总是为空。 我怎样才能做到这一点? 提前致谢。 编辑 – 代码添加… #include #include #include #include struct player { int no, age; char name[20]; } players[20]; void fillstruct(char *); void search(char []); int main(int argc, char *argv[]) { […]

strstr()在gcc和VS中的实现是否具有线性复杂性?

我知道有快速的字符串搜索算法,如Boyer-Moore和Knuth-Morris-Pratt ,它们具有O(n + m)复杂度,而普通解决方案将是O(n * m)。 那么最流行的工具链(gcc和Visual Studio)的strstr()的实现是使用这些快速的O(n)算法,还是使用简单的解决方案?

strstr()函数

我正在尝试编写一个程序,将用户输入的子字符串与字符串数组进行比较。 #include #include char animals[][20] = { “dogs are cool”, “frogs are freaky”, “monkeys are crazy” }; int main() { char input[10]; puts(“Enter animal name: “); fgets(input, sizeof(input), stdin); int i; for(i = 0; i < 3; i++) { if(strstr(animals[i], input)) printf("%s", animals[i]); } return 0; } 当我进入青蛙时,例如它应该打印出“青蛙怪异”的信息,但它没有打印出来。 所以我试着写一行来每次打印出strstr()函数的值,它们都返回0,这意味着所有的比较都失败了。 我不明白为什么,有人能帮帮我吗?

如何在c中找到两个字符串之间的文本

我需要在c中提取2个字符串模式之间的文本。 例: aaaaaaTEXT TO EXTRACTaaaaaaaaa PATTERN1= PATTERN2= 谢谢。

strstr仅在我的子字符串位于字符串末尾时才起作用

我现在写的这个程序遇到了一些问题。 strstr仅在我的字符串末尾输出我的子字符串 之后它还会输出一些垃圾字符 我有“const char * haystack”的问题,然后添加输入,所以我用fgets和getchar循环 在它的工作方式的某个地方,它不仅在最后一个子串,但后来我输出了子串和其余的字符串ater that 这是我的主要内容: int main() { char haystack[250], needle[20]; int currentCharacter, i=0; fgets(needle,sizeof(needle),stdin); //getting my substring here (needle) while((currentCharacter=getchar())!=EOF) //getting my string here (haystack) { haystack[i]=currentCharacter; i++; } wordInString(haystack,needle); return(0); } 和我的function: int wordInString(const char *str, const char * wd) { char *ret; ret = strstr(str,wd); printf(“The substring […]

一个纯字节版本的strstr?

是否有一个版本的strstr在固定长度的内存上工作,可能包含空字符? 我可以这样说出我的问题:strncpy是memcpy,因为strstr是?

实现strnstr

我试图将一个strnstr函数实现为C(strstr,但它检查长度),由于某种原因它不起作用(输出总是没有): #include 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 = […]

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]) 返回1; CS ++; } 返回0; } 该函数返回一个整数,因为它足以知道ct中是否出现ct。 在这种特殊情况下,我的function比标准的strstr简单快捷,但我很想知道是否有人可以应用一些性能改进。 即使很小的改进也是受欢 摘要: cs的长度> = […]

strstr比算法快?

我有一个21056字节的文件。 我在C中编写了一个程序,将整个文件读入缓冲区,然后使用多个搜索算法在文件中搜索82个字符的标记。 我已经使用了“精确字符串匹配算法”页面中所有算法的实现。 我用过:KMP,BM,TBM和Horspool。 然后我使用strstr并对每个人进行基准测试。 我想知道的是,每次strstr优于所有其他算法。 有时候唯一更快的是BM。 不应该是最慢的吗? 这是我的基准代码,其中包含基准测试BM的示例: double get_time() { LARGE_INTEGER t, f; QueryPerformanceCounter(&t); QueryPerformanceFrequency(&f); return (double)t.QuadPart/(double)f.QuadPart; } before = get_time(); BM(token, strlen(token), buffer, len); after = get_time(); printf(“Time: %f\n\n”, after – before); 有人可以向我解释为什么strstr优于其他搜索算法吗? 如果需要,我会根据请求发布更多代码。