gpt4 book ai didi

c++ - 递归地向 vector 添加项目

转载 作者:太空宇宙 更新时间:2023-11-04 12:19:14 32 4
gpt4 key购买 nike

我正在尝试创建一个递归函数,该函数输出一个字符串 vector ,其中包含给定字符串的所有可能的单词组合(同时保留字母顺序)。基本上,自动更正打字程序的基础,产生类似于 iPhone 的效果。

vector<string> allPossibleWords(string str, vector<vector<char> > & adjacentKeys)
{
vector<string> words;

cout << str << endl;

if (str.length() == 0)
{
return words;
}

char firstLetter = str[0];
string restOf = str.substr(1, str.length() - 1);
int position = position_in_vector(firstLetter);

for (int i = 0; i < adjacentKeys[position].size(); i++)
{
string temp(1, adjacentKeys[position][i]);
words.push_back(temp);
}

//allPossibleWords(restOf, adjacentKeys);
}

int position_in_vector(char letter)
{
return (letter % 97);
}

例如,如果 str 是“yp”,输出应该是一个 vector ,包含值 {“yp”、“tp”、“gp”、“hp”、“up”、“yo”、“to” , "go", "ho", "uo", "yl", "tl", "gl", "hl", "ul"}。如果 str 为“y”,则输出应为包含值 {“y”、“t”、“g”、“h”、“u”} 的 vector 。

adjacentKeys 中存储的 26 个 vector 包含与存储在 vector 第一个位置的字母相邻的字母。

a   qwsz
b vghjn
c xdfgv
d zserfcx
//and so on

我被这个函数困住了,不知道如何递归地构建这个 vector 。

最佳答案

(更新:格林威治标准时间周日 2130 点:我已经显着改变了我的答案。我认为这现在有效。)

这是一个完整的程序。我认为我会做出其他更改,但我正在努力保持您最初解决方案的精神。当 str.length()==0 时返回一个空单词很重要。

#include <vector>
#include <iostream>
using namespace std;


vector<string> allPossibleWords(string str, vector<vector<char> > & adjacentKeys)
{
vector<string> words;

// cout << "str=" << str << endl;

if (str.length() == 0)
{
words.push_back("");
return words;
}

char firstLetter = str[0];
// cout << "firstLetter=" << firstLetter << endl;
int positionInAdjacentKeys = 0;
while(positionInAdjacentKeys < adjacentKeys.size() && adjacentKeys.at(positionInAdjacentKeys).front() != firstLetter) {
++ positionInAdjacentKeys;
}
vector<char> & adjacent = adjacentKeys.at(positionInAdjacentKeys);

string restOf = str.substr(1, str.length() - 1);
// cout << firstLetter << ":" << restOf << endl;

// int position = position_in_vector(firstLetter);

vector<string> recursiveWords = allPossibleWords(restOf, adjacentKeys);

for (int i = 0; i < adjacent.size(); i++)
{
const string temp(1, adjacent[i]);
// cout << " temp=" << temp << endl;
for(vector<string>::const_iterator i = recursiveWords.begin(); i != recursiveWords.end(); i++)
{
// cout << "new word=" << temp + *i << endl;
words.push_back(temp + *i);
}
}
return words;
}


int main() {
vector<vector<char> > adj;
vector<char> v1;
v1.clear();
v1.push_back('p');
v1.push_back('o');
v1.push_back('l');
adj.push_back(v1);
v1.clear();
v1.push_back('y');
v1.push_back('t');
v1.push_back('g');
v1.push_back('h');
v1.push_back('u');
adj.push_back(v1);
adj.push_back(v1);

vector<string> words = allPossibleWords("yp", adj);

for(vector<string> :: const_iterator i = words.begin(); i != words.end(); i++) {
cout << *i << endl;
}
}

返回

关于c++ - 递归地向 vector 添加项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6003649/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com