21xrx.com
2024-11-05 17:29:03 Tuesday
登录
文章检索 我的文章 写文章
C++如何在字符串中查找子串位置
2023-07-09 09:00:45 深夜i     --     --
C++ 字符串 查找 子串 位置

C++作为一门高级编程语言,广泛应用于各种领域,包括字符串处理。在字符串处理中,经常需要查找子串的位置,因此在C++中,提供了一些函数来实现这一功能。

在C++中,查找字符串的位置可以使用字符串类中的find函数。该函数的语法如下:


size_t find (const string& str, size_t pos = 0) const noexcept;

其中,str是需要查找的子串,pos是开始查找的位置。该函数返回子串在字符串中第一次出现的位置。如果未找到子串,则返回npos。例如:


std::string str = "Hello, World!";

size_t pos = str.find("World");

if (pos != std::string::npos)

  std::cout << "Found at position: " << pos << std::endl;

else

  std::cout << "Not found" << std::endl;

输出结果为:


Found at position: 7

除了find函数,还可以使用substr函数来获取一个子串。substr函数的语法如下:


string substr (size_t pos = 0, size_t len = npos) const;

其中,pos是子串的起始位置,len是要获取的子串的长度。如果没有指定len,则默认获取从pos开始到字符串结尾的所有字符。例如:


std::string str = "Hello, World!";

std::string sub = str.substr(7, 5);

std::cout << sub << std::endl;

输出结果为:


World

在处理字符串时,需要小心处理边界情况。例如,如果子串为空,则需要特殊处理。如果pos超出了字符串的长度,则会触发未定义的行为。考虑到这些情况,可以封装一个工具函数来方便地进行字符串查找操作。例如:


size_t find_substring(const std::string& str, const std::string& sub, size_t start = 0) {

  if (sub.empty())

    return std::string::npos;

  

  size_t pos = str.find(sub, start);

  if (pos == std::string::npos)

    return std::string::npos;

  

  return pos;

}

使用该函数,可以更方便地进行子串查找:


std::string str = "Hello, World!";

std::string sub = "World";

size_t pos = find_substring(str, sub);

if (pos != std::string::npos)

  std::cout << "Found at position: " << pos << std::endl;

else

  std::cout << "Not found" << std::endl;

输出结果与之前相同。这样,我们就可以方便地在C++中进行字符串的子串查找了。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复