我正在尝试使用两个字符串来比较单词列表。例如,如果有人输入单词"Hello Man Tomato Yum Zebra"
,我想将我的两个向量设置为前两个单词,然后向上移动两个向量。 S1将是hello
,那么S2将是Man
。在比较它们并移动向量之后,S1现在将是Man
而S2将是Tomato
。继续这样做,直到我到达最后两个单词,当我这样做时,打印出我们看到的所有独特单词。
唯一的问题是我无法将整个单词列表存储在字符串中,也不能使用集合,矢量或地图。
如果您需要更多详细信息或部分代码,请与我们联系。
#include <iostream>
#include <string>
using namespace::std;
int main(){
string S;
string V;
string Unique;
string Dup;
cin >> S;
cin >> V;
int temp;
//For unique strings
if (S.length() != V.length()){
Unique += S;
Unique += ' ';
Unique += V;
}
else if (S[0] != V[0]){
Unique += S;
Unique += ' ';
Unique += V;
}
//for dup strings
else if (S[0] == V[0]){
for (int i=1; i < S.length(); ++i){
if (S[i] != V[i]) {
//if there is a letter that does match they are not duplicates so add them to unique
Unique += S;
Unique += ' ';
Unique += V;
break;
}
temp = i;
// this will break when it finds it's a dup or when i reaches the length of S and they are duplicates
}
if (temp == S.length()-1){
cout << "Duplicate string" << endl;
}
}
//cout the unique words
for (int i=0; i < Unique.length(); i++){
cout << Unique[i];
}
cout << endl;
return 0;
}
所以基本上我接受两个字符串并比较它们以查看它们是唯一的还是重复的。 我希望能够通过输入两个以上的单词来移动向量,如何在不保存整个输入的情况下让向量在整个输入中移动?
输入3个字"Hello Hello Man"
的预期输出只是"Man"
,因为它是唯一的唯一字。
答案 0 :(得分:0)
你可以有一个函数,每次连续调用都会从输入中生成下一个单词。 在循环中,有两个调用将最后一个字与下一个字进行比较,直到达到输入结束。
#include <iostream>
#include <string>
using namespace std;
//global variables; when updated
//return the next word from nextWord function
int start, space;
string nextWord(string wordList)
{
//find the next space
space = wordList.find(" ", space+1);
//find the next word
string word = wordList.substr(start, space-start);
//restrict the search range
start = space + 1;
return word;
}
int main()
{
//set initial values
string words;
getline(cin, words);
string last = nextWord(words);
string next;
while (true)
{
if (space == -1)
break;
next = nextWord(words);
if (last == next){
cout << next << endl;
}
last = next;
}
return 0;
}