19

如何使用 C/C++ 从字符串路径“/user/desktop/abc/post/”中找到子字符串?我想检查该路径中是否存在文件夹“abc”。

路径是字符指针char *ptr = "/user/desktop/abc/post/";

4

7 回答 7

39

使用std::stringfind

std::string str = "/user/desktop/abc/post/";
bool exists = str.find("/abc/") != std::string::npos;
于 2012-11-02T12:35:16.060 回答
18

在 C 中,使用strstr()标准库函数:

const char *str = "/user/desktop/abc/post/";
const int exists = strstr(str, "/abc/") != NULL;

注意不要意外找到太短的子字符串(这就是开始和结束斜线的用途)。

于 2012-11-02T12:35:35.383 回答
10

std::string使用find 方法的示例:

#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.
于 2013-09-06T16:19:06.200 回答
0

使用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] != '\0'; i++) 
{
for (j=i, k=0; t[k]!='\0' && s[j]==t[k]; j++, k++);
if (k > 0 && t[k] == '\0')
return (&s[i]);
}
return NULL;
}
于 2012-11-02T12:36:59.987 回答
0

正如 user1511510 所指出的,当 abc 位于文件名的末尾时,存在一种不寻常的情况。我们需要寻找其中一个/abc//abc后跟一个 string-terminator '\0'。一种天真的方法是检查是否/abc//abc\0子字符串:

#include <stdio.h>
#include <string.h>

int main() {
    const char *str = "/user/desktop/abc";
    const int exists = strstr(str, "/abc/") || strstr(str, "/abc\0");
    printf("%d\n",exists);
    return 0;
}

exists即使 abc 后面没有空终止符,也会为 1。这是因为字符串文字"/abc\0"等价于"/abc". 更好的方法是测试是否/abc是子字符串,然后查看该子字符串后面的字符(使用由返回的指针进行索引strstr())是 a/还是 a '\0'

#include <stdio.h>
#include <string.h>

int main() {
    const char *str = "/user/desktop/abc", *substr;
    const int exists = (substr = strstr(str, "/abc")) && (substr[4] == '\0' || substr[4] == '/');
    printf("%d\n",exists);
    return 0;
}

这应该适用于所有情况。

于 2012-11-02T16:52:14.727 回答
-1

如果您过多地使用数组,那么您应该包括在内cstring.h,因为它有太多的功能,包括查找子字符串。

于 2012-11-02T14:12:30.040 回答
-1

在 C++ 中

using namespace std;

string my_string {"Hello world"};
string element_to_be_found {"Hello"};

if(my_string.find(element_to_be_found)!=string::npos)
   std::cout<<"Element Found"<<std::endl;
于 2020-06-26T04:17:00.433 回答