【发布时间】:2014-03-06 03:14:24
【问题描述】:
我正在尝试实现将给定字符串分解为其组成字典单词问题的解决方案,但我的代码为诸如“icecreamicecream”之类的字符串提供了错误的输出,其中我在输出中两次获得了一些单词。请让我知道我哪里出错了。以下是我的代码:
#include <set>
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include<string.h>
#define MAX 12
using namespace std;
string arr[]={"i", "like", "sam", "sung", "samsung", "mobile", "ice","cream", "icecream", "man", "go", "mango"};
set<string> dictionary (arr,arr+MAX);
int cnt=0;
void print_words(string str,int i,int j)//i and j denote starting and ending indices respectively of the string to be matched
{
if(i>j||j>=str.length()||i>=str.length())
{
return;
}
string temp (str, i, j-i+1);
if(dictionary.find(temp)==dictionary.end())
print_words(str,i,j+1);
else
{
cout<<temp<<endl;
cnt++;
print_words(str,j+1,j+1);
print_words(str,i,j+1);
}
}
int main()
{
string str;
cin>>str;
print_words(str,0,0);
cout<<cnt<<endl;
return 0;
}
对于字符串 icecreamicecream:我希望这是输出的顺序: 我冰淇淋我冰淇淋冰淇淋冰淇淋 第一次我以线性方式找到所有单词,然后回溯以获取剩余的单词。
【问题讨论】:
-
您的问题有多种解决方案,但您似乎没有将它们分开(示例解决方案:
ice cream ice cream、icecream icecream、i cream icecream...)。 -
据我所知,显示的输出应该是:i ice cream i ice cream icecream icecream
-
您应该在问题中发布您期望/想要的内容(比您的评论更详细)。
-
我已经编辑了问题。
-
好的,但是:这不是线性搜索(在“回溯”之前)。通过线性搜索,您将得到
i cream(注意ice不存在)。
标签: c++ string string-matching