求问这个程序怎么做,我不会写

编写一个程序,从标准输入中读取string对象的序列直到连续出现两个相同的单词或者所有单词都读完为之。使用while循环一次读取一个单词,当一个单词连续出现两次时使用break语句终止循环。输出连续重复出现的单词,或者输出一个消息说明没有重复单词。下面是我的函数,得不到想要的结果
#include
#include
#include
using namespace std;
int main(){
int k=0,j=0;
string i;
while(cin>>i){
for(j=0;j!=i.size()-2;++j){
if(i[j]==i[i.size()-1]){
k=1;
}
if(k=1){
cout<<"Repeat words are"<<i[i.size()-1];
break;
}
}}
cout<<"NO repeat words";
}

先把第一个 单词放到 string 里,然后 从队列里 取下一个单词,与第一个相比较,如果一样,说明找到了, 不一样,再把 取出的这个付给 string ,直到循环
结束。 只给你提供思路,自己实现一下哈 。

下面这段代码可以用strcmp或者是C++的string类中的字符串比较函数来代替
for(j=0;j!=i.size()-2;++j){
if(i[j]==i[i.size()-1]){
k=1;
}

这段代码中你的if语句中是赋值语句,不是比较相等
if(k==1){ //少了个等号
cout<<"Repeat words are"<<i[i.size()-1];
break;
}

循环外定义一个空数组a和一个布尔isNoRepeat = false,循环内嵌套for(a.length),
用i[j]逐个比对,有重复值isNoRepeat = true,cout<<"Repeat words are"<< i[j],break;
内循环结束后将i[j]追加到a。
外循环结束后if(isNoRepeat) cout<<"NO repeat words";

思路:定义一个数组,输入第1个单词,直接放入数组,输入第n个单词,和数组中的单词比较,找到重复的单词,则输出这个单词并结束,找不到则将其放入数组,数组放满,则没有重复单词结束。
代码如下:


#include "iostream"
#include "string"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    string strArray[10];//定义一个数组存放输入的单词
    int iArrayLen = 0; //保存数组中存放单词的个数
    int k=0,i=0;
    string strTemp;
    while(cin>>strTemp)
    {
        if(iArrayLen == 0)
        {//第一个单词,直接放入数组
            strArray[iArrayLen++] = strTemp;
        }
        else
        {//将输入的单词和放在数组中的单词比较
            for(int i = 0; i < iArrayLen; i++)
            {
                if(strArray[i] == strTemp)
                {//找到重复
                    cout<<"Repeated word are "<<strTemp;
                    return 0;   
                }
            }

            //未找到重复单词
            strArray[iArrayLen++] = strTemp;

            if(iArrayLen >= 10)
            {//输入结束,没有重复的单词
                break;
            }
        }
    }
    cout<<"No repeated word";

    return 0;
}

采用map进行处理,以下为visual studio中的代码,测试可实现您要的功能
#include "stdafx.h"
#include
#include
#include

using namespace std;
int main()
{
string in;
unordered_map mp;
bool flag = false;
//ctrl +c进行中断输入
while (cin>>in ) {
if (mp[in]) {
cout << in<<endl;
flag = true;
break;
}
else {
mp[in]++;
}
}
if(flag){
system("pause");
return 1;
}
else {
cout << "no repeat words" << endl;
system("pause");
return 0;
}

}

string temp,newtemp;
bool flag=true;
while(cin>>newtemp)
{
if(temp==newtemp)
{
flag=false;
break;
}
temp=newtemp;
}
if(flag)
{
cout<<"no repeat string";
}
else
{
cout<<temp;
}






















用C++的内置数据类型SET(集合),可以很容易的判断是否有重复。
代码不到20行,核心代码不到10行、

#include<iostream>
#include<string>
#include<set>
using namespace std;
set<string>s;//集合,判断是否有重复
int main(){
    string t;
    while(cin>>t){
        if(s.count(t)){//如果原来有了,那么就是第二次出现
            cout<<t<<'\n';
            return 0;//直接结束程序
        }else{//如果原来没有
            s.insert(t);//集合中加入当前字符串
        }
    }
    cout<<"没有重复单词"<<endl;
    return 0;
}

判断重复元素,当时使用集合set结构啊. C++标准库已经实现了set, 这里有一个我用C实现的set以及example:
https://github.com/foreverpersist/set

听着和排序一样。。。 相同了跳出就好了