编写一个程序,从标准输入中读取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
听着和排序一样。。。 相同了跳出就好了