我不太确定我是否正确理解了您的问题,但是如果您想检查用户的输入是否是您的单词向量中任何单词的子字符串,那么 Check if a string contains a string in C++ 可能就是您要查找的内容。
您可以执行以下操作来计算在您的向量的任何单词中找到inputUser 的次数:
std::vector<std::string> words = { "Winter", "Summer", "Autmn", "inter" };
std::string inputOfUser = "int";
int countMatches = 0;
for (std::string word : words) {
if (word.find(inputOfUser) != std::string::npos) {
countMatches++;
}
}
std::cout << countMatches << std::endl;
在本例中,输出为2
编辑(编辑问题后)
我认为我现在理解了您的问题,我认为这可能是您正在寻找的:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
std::vector<std::string> getSubStrings(char[], int n);
int main()
{
std::vector<std::string> words = { "winter", "summer", "autmn", "inter" };
std::string inputOfUser = "Winter";
std::vector<std::string> subStrings;
//transform the input to lower-case
std::transform(inputOfUser.begin(), inputOfUser.end(), inputOfUser.begin(), ::tolower);
//as getSubString requires a char[]
char* temp = &inputOfUser[0];
subStrings = getSubStrings(temp, inputOfUser.size());
// go through every substring
for (std::string subString : subStrings) {
std::cout << std::endl << "looking for substring: " << subString << std::endl;
// go through every word of your vector
for (std::string word : words) {
// does the word contain the substring?
if (word.find(subString) != std::string::npos){
// yes, it does
std::cout << "found: " << subString << " in word: " << word << std::endl;
}
//else: it does not
}
}
}
在此示例中,将getSubStrings(temp, inputOfUser.size()) 分配给subStrings 后,subStrings 将如下所示:
我从https://www.geeksforgeeks.org/program-print-substrings-given-string/ 中提取了getSubStrings() 方法,并对其进行了一些修改,因此它适合您的情况:
std::vector<std::string> getSubStrings(char str[], int n)
{
std::vector<std::string> subStrings;
// Pick starting point
for (int len = 1; len <= n; len++)
{
// Pick ending point
for (int i = 0; i <= n - len; i++)
{
std::string tempSub = "";
// take only the substrings that are greater than 2 in size
if (len > 2) {
// Add characters from current
// starting point to current ending
// point to tempSub
int j = i + len - 1;
for (int k = i; k <= j; k++) {
tempSub += str[k];
}
// push the resulted substring into subStrings
subStrings.push_back(tempSub);
}
}
}
return subStrings;
}
对于给定的示例,结果如下(请记住,单词看起来像这样std::vector<std::string> words = { "Winter", "Summer", "Autmn", "inter" };
输入看起来像这样std::string inputOfUser = "Winter":
looking for substring: win
found: win in word: winter
looking for substring: int
found: int in word: winter
found: int in word: inter
looking for substring: nte
found: nte in word: winter
found: nte in word: inter
looking for substring: ter
found: ter in word: winter
found: ter in word: inter
looking for substring: wint
found: wint in word: winter
looking for substring: inte
found: inte in word: winter
found: inte in word: inter
looking for substring: nter
found: nter in word: winter
found: nter in word: inter
looking for substring: winte
found: winte in word: winter
looking for substring: inter
found: inter in word: winter
found: inter in word: inter
looking for substring: winter
found: winter in word: winter