如何从字符串中找到子字符串
How to find substring from string?
本文关键字:字符串 更新时间:2023-10-16
如何使用C/C 从字符串路径找到子字符串/user/desktop/abc/post/"?我想检查文件夹是否存在该路径中的" ABC"。
路径是字符指针char *ptr = "/user/desktop/abc/post/";
使用std::string
和find
。
std::string str = "/user/desktop/abc/post/";
bool exists = str.find("/abc/") != std::string::npos;
在C中,使用strstr()
标准库函数:
const char *str = "/user/desktop/abc/post/";
const int exists = strstr(str, "/abc/") != NULL;
注意不要意外地找到太短的子字符串(这是起点和结束斜线的目的)。
使用std::string
查找方法:
#include <iostream>
#include <string>
int main (){
std::string str ("There are two needles in this haystack with needles.");
std::string str2 ("needle");
size_t found = str.find(str2);
if(found!=std::string::npos){
std::cout << "first 'needle' found at: " << found << 'n';
}
return 0;
}
结果:
first 'needle' found at: 14.
使用strstr(const char *s , const char *t)
和include<string.h>
您可以编写自己的功能,该功能与strstr
相同,并且可以根据您的要求进行修改
char * str_str(const char *s, const char *t)
{
int i, j, k;
for (i = 0; s[i] != ' '; i++)
{
for (j=i, k=0; t[k]!=' ' && s[j]==t[k]; j++, k++);
if (k > 0 && t[k] == ' ')
return (&s[i]);
}
return NULL;
}
作为User1511510所确定的,当ABC处于文件名的末尾时,存在一种不寻常的情况。我们需要查找/abc/
或/abc
,然后是字符串末端' '
。这样做的一种天真的方法是检查/abc/
还是/abc
是子字符串:
#include <stdio.h>
#include <string.h>
int main() {
const char *str = "/user/desktop/abc";
const int exists = strstr(str, "/abc/") || strstr(str, "/abc ");
printf("%dn",exists);
return 0;
}
,即使不随之而来的null终端器,exists
也将是1。这是因为字符串字面的"/abc "
等效于"/abc"
。一种更好的方法是测试/abc
是否是子字符串,然后查看此子字符串后的字符(使用strstr()
返回的指针索引)是/
还是' '
:
#include <stdio.h>
#include <string.h>
int main() {
const char *str = "/user/desktop/abc", *substr;
const int exists = (substr = strstr(str, "/abc")) && (substr[4] == ' ' || substr[4] == '/');
printf("%dn",exists);
return 0;
}
这在所有情况下都应起作用。
如果您使用的数组过多,则应包括cstring.h
,因为它具有太多的功能,包括查找子字符串。