使用C++打印出给定字符串中作为子字符串出现的给定数组中的所有字符串
在实际的开发中,经常会遇到需要在一个字符串中查找另一个字符串的需求。这个时候,我们可以使用C++提供的字符串操作函数来实现。比如,我们可以使用string类中的find函数来查找给定子字符串是否在给定字符串中出现。同时,我们还可以使用字符串中的substr函数来获取子字符串。
1. 使用find函数查找子字符串在另一个字符串中的位置
在C++中,string类中提供了find函数。其基本语法如下:
size_t find (const string& str, size_t pos = 0) const noexcept;
size_t find (const char* s, size_t pos = 0) const;
size_t find (const char* s, size_t pos, size_t n) const;
size_t find (char c, size_t pos = 0) const noexcept;
其中,str表示需要查找的子字符串;s表示需要查找的字符数组;pos表示在给定字符串中需要查找的位置;n表示s的长度;c表示需要查找的字符。
例如,我们可以使用如下代码来查找子字符串"hello"在给定字符串"world hello"中的位置:
#include <string>
#include <iostream>
using namespace std;
int main () {
string s = "world hello";
string sub = "hello";
size_t found = s.find(sub);
if (found != string::npos)
cout << "子字符串'" << sub << "'在字符串'" << s << "'中的位置是:" << found << endl;
else
cout << "未找到子字符串'" << sub << "'" << endl;
return 0;
}
输出结果为:
子字符串'hello'在字符串'world hello'中的位置是:6
2. 使用substr函数获取子字符串
在找到字符串中的子字符串位置之后,我们还需要将其提取出来。这个时候,我们可以使用C++中的substr函数来进行提取。其基本语法如下:
string substr (size_t pos = 0, size_t len = npos) const;
其中,pos表示子字符串的开始位置,len表示子字符串的长度。
例如,我们可以使用如下代码来查找子字符串"hello"在给定字符串"world hello"中的位置,并将其提取出来:
#include <string>
#include <iostream>
using namespace std;
int main () {
string s = "world hello";
string sub = "hello";
size_t found = s.find(sub);
if (found != string::npos) {
string result = s.substr(found, sub.length());
cout << "子字符串'" << sub << "'在字符串'" << s << "'中的位置是:" << found << endl;
cout << "子字符串'" << sub << "'在字符串'" << s << "'中的内容是:" << result << endl;
}
else
cout << "未找到子字符串'" << sub << "'" << endl;
return 0;
}
输出结果为:
子字符串'hello'在字符串'world hello'中的位置是:6
子字符串'hello'在字符串'world hello'中的内容是:hello
3. 使用循环遍历数组中的字符串,并逐一进行查找和提取
有了find和substr函数,我们就可以使用循环遍历数组中的字符串,并逐一进行查找和提取了。具体实现方法如下:
#include <string>
#include <iostream>
#include <vector>
using namespace std;
int main() {
string s = "hello world, hello";
vector<string> words = {"hello", "world"};
size_t pos = 0;
while (pos != string::npos) {
for (const auto& word : words) {
pos = s.find(word, pos);
if (pos != string::npos) {
string found = s.substr(pos, word.length());
cout << "子字符串'" << found << "'在给定数组中的字符串'"<< s <<"'中出现了" << endl;
pos += word.length();
}
}
}
return 0;
}
以上代码中,我们首先定义了一个包含两个字符串的vector,然后使用while循环来在给定字符串中查找这两个字符串。在循环的过程中,我们使用for循环来遍历vector中的所有字符串,并使用find和substr函数来逐一查找和提取字符串。当子字符串在数组中的某个字符串中出现时,我们则会打印出相应的信息。
输出结果为:
子字符串'hello'在给定数组中的字符串'hello world, hello'中出现了
子字符串'world'在给定数组中的字符串'hello world, hello'中出现了
子字符串'hello'在给定数组中的字符串'hello world, hello'中出现了
总结
本文介绍了如何使用C++对给定字符串中作为子字符串出现的给定数组中的所有字符串进行打印的方法。具体来说,我们可以使用string类中的find和substr函数来实现。在实际的开发中,这些函数非常实用,特别是在需要对字符串进行查找和提取的场景中。
需要注意的是,find函数在找不到子字符串时会返回一个特殊的值string::npos,该值通常被定义为-1或4294967295(对应无符号整数的最大值)。因此,在使用find函数时需要判断其返回值,否则可能会产生一些异常错误。
另外,需要注意的是,在实际的开发中,字符串查找和处理的场景非常多,我们需要根据具体的问题并综合使用多个函数来实现。因此,我们需要熟练掌握各种字符串操作函数的使用方法,以便在实际的开发中能够快速地解决问题。