标题:小菜b求大神解答,所有分数送上,希望能指出存在的问题,今晚坐等。。
取消只看楼主
哒哒哒啦啦啦
Rank: 1
等 级:新手上路
帖 子:75
专家分:4
注 册:2016-2-26
结帖率:76.92%
已结贴  问题点数:100 回复次数:6 
小菜b求大神解答,所有分数送上,希望能指出存在的问题,今晚坐等。。
程序是这样子滴
从输入中读取若干string对象并查找连续重复出现的单词(一个单词后面紧跟着这个单词本身)。要求记录连续重复出现的次数以及对应单词。如果存在,输出重复出现次数最多的单词及数目。例如: how now now now brown cow cow,答案是now出现了三次。
******************************************************************************************
#include<iostream>
#include<vector>
#include<string>
using std::cin;
using std::cout;
using std::endl;
using std::vector;
using std::string;
void main()
{
    vector<string> v;      //这个是存放单词的
    vector<int> v1;        //这个是存放每个重复过的单词的容器,奇数位是单词在容器v中的位置,以便于比较后输出,偶数位是对应奇数位重复出现的最大数字
    vector<int> v2;        //这个是比较v1的遍数哪个大,将大的存在里面
    string i;
    int n1 = 1;
    while (cin >> i)
        v.push_back(i);
    int j = v.size();
    int n = 0,n1=0;
    for (n; n + 1 <= j; ++n)
    {
        if (v[n] == v[n + 1])
        {
            ++n1;
        }
        if ((v[n] != v[n + 1])&&(n1>0))      //有过重复,但这次不是,就把这个重复记录对应的v中的单词位置,重复次数放入v1中
    {
            v1.push_back(n1);//n1遍
            v1.push_back(n-1);//v中的单词位置,用于以后输出
        }
    }
    for (j = 0; j < (v1.size() / 2); j += 2)
    {
        int t;
        if (v1[j] < v1[j + 2])                   //哪个重复次数多就把谁放入v2中
        {
            v2.push_back(v1[j + 2]);
            v2.push_back(v1[j + 3]);
        }
        else {
            v2.push_back(v1[j]);
            v2.push_back(v1[j + 1]);
        }
        cout << "出现次数最多的单词是" << v[v2[1]] << endl;
        cout << "出现次数是" << v1[v2[0]] << endl;
    }
}






搜索更多相关主题的帖子: include 小菜 记录 单词 
2016-04-12 22:42
哒哒哒啦啦啦
Rank: 1
等 级:新手上路
帖 子:75
专家分:4
注 册:2016-2-26
得分:0 
回复 5楼 lin5161678
放在外面也不对呢。。我就是想知道我这个怎么改。。。
map还没学,想看看我的这种到底哪里错了。。
2016-04-12 23:08
哒哒哒啦啦啦
Rank: 1
等 级:新手上路
帖 子:75
专家分:4
注 册:2016-2-26
得分:0 
回复 2楼 alice_usnet
厉害。。能看看我这种哪里错了吗?
2016-04-12 23:13
哒哒哒啦啦啦
Rank: 1
等 级:新手上路
帖 子:75
专家分:4
注 册:2016-2-26
得分:0 
经过各位大神点播,改正了原程序,测试没问题~
#include<iostream>
#include<vector>
#include<string>
using std::cin;
using std::cout;
using std::endl;
using std::vector;
using std::string;
void main()
{
    vector<string> v;      //这个是存放单词的
    vector<int> v1 = { 0,0 };        //这个是存放每个重复过的单词的容器,奇数位是单词在容器v中的位置,以便于比较后输出,偶数位是对应奇数位重复出现的最大数字
    vector<int> v2;        //这个是比较v1的遍数哪个大,将大的存在里面
    string i;
    int n1 = 1;
    while (cin >> i)
        v.push_back(i);

    int j = v.size();
    for (int n = 0; n + 1 < j; ++n)
    {
        if (v[n] == v[n + 1])
        {
            ++n1;
        }
        if (((v[n] != v[n + 1]) && (n1 > 1)) || (n+2==j))   //n+2==j,是为了判断当最后一组是重复次数最多的数时,要放入v1
        {
            if (v1[0] < n1)
            {
                v1[0] = n1;              //把目前重复次数最多的一组放里面
                v1[1] = n;
            }
            n1 = 1;
        }
    }
    cout << "出现次数最多的单词是" << v[v1[1]] << endl;
        cout << "出现次数是" << v1[0] << endl;
}
   
2016-04-13 19:55
哒哒哒啦啦啦
Rank: 1
等 级:新手上路
帖 子:75
专家分:4
注 册:2016-2-26
得分:0 
回复 12楼 c974288432
没有输入就结束了
2016-04-13 19:55
哒哒哒啦啦啦
Rank: 1
等 级:新手上路
帖 子:75
专家分:4
注 册:2016-2-26
得分:0 
回复 11楼 yangfrancis
谢谢,改完跟你的思路有点像
2016-04-13 20:02
哒哒哒啦啦啦
Rank: 1
等 级:新手上路
帖 子:75
专家分:4
注 册:2016-2-26
得分:0 
回复 9楼 lin5161678
多谢,很详细,分数给你的最多啦~
2016-04-13 20:04



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-463582-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.436906 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved