输入两个字符串,比如abdcc和abc,输出第二个字符串在第一个字符串中的连接次序
2012-05-09 19:34
627 查看
#include <iostream> #include <vector> #include <stdio.h> using namespace std; typedef vector<int> vInt; typedef vInt::iterator itInt; typedef vector<vInt *> pVint; typedef vector<vInt> vvInt; //输入两个字符串,比如abdcc和abc,输出第二个字符串在第一个字符串中的连接次序 //示例的结果应为:125,126,145,146 //计算str2每个字母在str中出现的位置 pVint seq(char *str1,char *str2) { int len1=strlen(str1); int len2=strlen(str2); //使用一个vector <vector<int> *>存储返回结果 pVint vres; for (int i=0; i<len2; i++) { //存储str2中每个字母在str1中出现的位置 vInt *pTmp=new vInt; for (int j=0;j<len1; j++) { if(str2[i]==str1[j]){ pTmp->push_back(j+1); } } vres.push_back(pTmp); } return vres; } //计算两个序列的笛卡尔积,第一个序列是vector <vector<int>> //第二个是vector<int>,返回最终结果为笛卡尔积结果vector <vector<int>> //如:{{1,2},{3,4}}*{5,6}={{1,2,5},{1,2,6},{3,4,5},{3,4,6}} vvInt multi(vvInt v1, vInt v2) { int len1=v1.size(); int len2=v2.size(); pVint res; for (int i=0;i<len1;i++) { for (int j=0; j<len2; j++) { //注意这两层for循环次序 vInt *tmp=new vInt; for (int m=0; m<v1[i].size(); m++) tmp->push_back(v1[i][m]); tmp->push_back(v2[j]); res.push_back(tmp); } } vvInt fin; for (int j=0;j<res.size();j++) fin.push_back(*res[j]); return fin; } int main() { char str1[]="abdbcc"; char str2[]="abc"; pVint pRes=seq(str1,str2); //构造第一个vector <vector<int>>来作为基数((1)) pVint tmp; for (int i=0;i<(*pRes[0]).size();i++){ vInt *tmp1=new vInt; tmp1->push_back((*pRes[0])[i]); tmp.push_back(tmp1); } vvInt vtmp; for (int i=0;i<tmp.size();i++) vtmp.push_back(*tmp[i]); //使用for循环求的最终笛卡尔积结果 for (int i=1;i<pRes.size();i++) vtmp=multi(vtmp,*pRes[i]); //打印计算结果 for (int i=0;i<vtmp.size();i++) { for (int j=0;j<vtmp[i].size();j++) cout << vtmp[i][j] << " "; cout << endl; } return 0; }
相关文章推荐
- 输入两个字符串,比如abdbcc和abc,输出第二个字符串在第一个字符串中的连接次序(递归方法)
- 输入两个字符串,比如abdbcc和abc,输出第二个字符串在第一个字符串中的连接次序(递归方法)
- 输入两个字符串,比如abdbcc和abc,输出第二个字符串在第一个字符串中的连接次序(递归方法)
- 输入两个字符串,比如abdbcc和abc,输出第二个字符串在第一个字符串中的连接次序
- 《程序员面试宝典》:输入两个字符串,比如abdbcc和abc,输出第二个字符串在第一个字符串中的连接次序,即输出125,126,145,146
- 程序员面试宝典之输入两个字符串,比如abdbcc和abc,输出第二个字符串在第一个字符串中的连接次序,即输出125,126,145,146
- 程序员面试宝典 8.2 典型递归问题: 面试例题1: 输入两个字符串,比如 abdbcc 和 abc, 输出第二个字符串在第一个字符串中的连接次序。即输出 125, 126, 145, 146.
- 输入两个字符串,比如abdbcc和abc,把abc在abdbcc中的连接次序输出
- 输入两个字符串,输出第二个字符串在第一个字符串中的连接次序
- java--封装一类Java对象,用户从输入对话框输入两个日期,程序将判断两个日期的大小关系(比如输出:您输入的第二个日期大于第一个日期)以及两个日期之间的间隔天数(比如输出:2006年6月6日和
- 输出第二个字符串在第一个字符串中的连接次序
- 字符串问题:输出第二个字符串在第一个字符串中的连接次序
- C语言:从键盘输入两个字符串,输出第一个字符串在第二个字符串中的位置
- 按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。例如:输入2,8, “abc” ,“123456789”,则输出为“abc00000”,“12345
- 输入一行字符串,找出出现的相同且长度最长的字符串,输出它及其首字母的置比如:“yyabcdagaerabceg”答案应该是abc
- 《程序员面试宝典》求取第二个字符串在第一个字符串中的连接次序---递归算法
- 截取字符串。输入字符串和按照多大字节进行截取,输出结果:按照字节截取的字符串。注意:汉字占两个字节,所以输入的汉字不能截取为半个汉字!!!例子:输入“我ABC爱北京”,字节输入6,结果为:“我ABC”
- 输出第二个字符串在第一个字符串中的链接次序
- 按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。例如:输入2,8, “abc” ,“123456789”,则输出为“abc00000”,“12345
- 编写一个函数 接受两个字符串参数 如果 第一个参数被第二个包含 则输出第一个参数的首字符(图)