通过指定start pos查找char或子字符串

时间:2010-11-24 14:39:47

标签: c++

我找不到一个能让我指定开始pos开始char或子串搜索的函数。

我有,例如:

char *c = "S1S2*S3*S4";

我想通过搜索第一个'S3'星号然后跟随它的第二个星号来搜索“*”,最后得到那些包围的子串“S3”星号。

6 个答案:

答案 0 :(得分:9)

string类有一个大的find函数系列,它将索引作为第二个参数。 find('*', index)的重复申请应该能满足您的需求。

std::string s(c);
std::string::size_type star1 = s.find('*');
std::string::size_type star2 = s.find('*', star1 + 1);
std::string last_part = s.substr(star2 + 1);

答案 1 :(得分:2)

一种解决方案是找到第一个星号的位置,然后找到第二个星号的位置。然后使用这些位置作为开始和结束位置来搜索S3

答案 2 :(得分:1)

使用

char *strchr( const char *str, int ch );

请参阅here以获取参考资料

答案 3 :(得分:0)

#include <string>

std::string between_asterisks( const std::string& s ) {
    std::string::size_type ast1 = s.find('*');
    if (ast1 == std::string::npos) {
        throw some_exception();
    }
    std::string::size_type sub_start = ast1+1;
    std::string::size_type ast2 = s.find('*', sub_start);
    if (ast2 == std::string::npos) {
        throw some_exception();
    }
    return s.substr(sub_start, ast2-sub_start);
}

答案 4 :(得分:0)

您可以使用strchr()。只需保存返回的指针并将其传递给下一个调用。由于此指针指向搜索的出现,搜索将从那里开始。

答案 5 :(得分:0)

一种可能性 - 如果要对字符串使用c样式的char *数组 - 是使用strchr来搜索星号的出现,例如,(并且没有错误检查,请记住)

 char c []= "S1S2*S3*S4";

 char* first = strchr(c,'*');
 if (first) {
   char* start = ++first;
   char* nextast = strchr(start,'*');
   char* s3str = new char[nextast-start+1];
   strncpy(s3str,start,nextast-start);
   s3str[next-start] = '\0';
 }

但是使用C ++字符串类来执行此操作会更容易。

相关问题