iostream-c++primer 5.4.1 练习问题

问题描述

c++primer 5.4.1 练习问题

编写一段程序,从标准输入中读取若干string对象并查找连续重复出现的单词。所谓连续重复出现的意思是:一个单词后面紧跟着这个单词本身。要求记录连续重复出现的最大次数以及对应单词。如果这样的单词存在,输出重复出现的最大次数;如果不存在,输出一条信息说明任何单词都没有连续出现过。例如,如果输入是

how now now now brown cow cow

那么输出应该表明单词now连续出现了3次。
我的代码
#include
#include
#include
using namespace std;
int main()
{
vectortext;
string word;
while (cin >> word)
{
text.push_back(word);
}
int cnt = 1;
int b = 1;
auto c = text.begin();
for (auto i = text.begin(); i !=(text.end()); ++i)
{

    while (i !=(text.end()) && *i == *(i + 1)  )
    {
        ++cnt;
        ++i;
    }
    if (cnt >= b)
    {
         c = i;
        b = cnt;
    }

     cnt = 1;

}
if (cnt != 1)
        cout << "the word " << *c << " shows " << cnt << " times in a row" << endl;

if (cnt == 1)
        cout << "no one word has lianxu" << endl;
return 0;

}
但是最后

解决方案

C++Primer第五版 7.1.2节练习
C++Primer第五版 12.1.2节练习
C++Primer第五版 9.2.7节练习

解决方案二:

内外循环条件,导致iterator 越界。

解决方案三:

像这种问题运行时崩溃的基本都是非法访问内存,或者跟内存有关的问题,好好检查检查,调试调试就可以找出来了...

解决方案四:

while循环内的判断导致越界,i=end()—1的时候,i+1已经越界。

时间: 2024-11-03 18:41:25

iostream-c++primer 5.4.1 练习问题的相关文章

字符-c++ primer plus 里面第六章isdigit用法的一些疑问,初学者,脑残见谅

问题描述 c++ primer plus 里面第六章isdigit用法的一些疑问,初学者,脑残见谅 楼主在做这本书第六章课后习题时有些不理解这两段代码 代码1:isdigit的使用目的是识别出数字,把数字掠过而仅处理剩下的字符 while(ch!='@') { if(isdigit(ch)) cin.get(ch); else { if(islower(ch)) ch=toupper(ch); else ch=tolower(ch); cout< cin.get(ch); } 代码2:isdig

请问大家一个c++primer练习7.27的问题,按照习题答案这样写,提示我参数过多

问题描述 请问大家一个c++primer练习7.27的问题,按照习题答案这样写,提示我参数过多 #include <iostream> #include <string> #include<vector> using namespace std; class Screen { private: unsigned height = 0, width = 0; unsigned cursor = 0; string contents; public: Screen() =

c++-C++Primer,定义的String类的问题

问题描述 C++Primer,定义的String类的问题 在学习C++Primer第13章时,定义的类Spring代码如下: #ifndef STRING_H #define STRING_H #include <memory> #include <cstring> #include <algorithm> #include <iostream> class String { friend String add(const String&, cons

c++ primer...-C++新手,请大家为我解答第二题!非常感谢

问题描述 C++新手,请大家为我解答第二题!非常感谢 请大家给我解答一下第二题!谢谢了,还有为什么我看C++ primer plus这本书前面教的我都懂就是到练习题不会做了? 解决方案 #include <iostream>using namespace std;int main(){ cout << ""please enter long:"" << endl; double l; cin >> l; cout &l

把《c++ primer》读薄(1-2前言+变量和基本类型)

督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 一:大小端的概念 Big-Endian和Little-Endian(见计算机存储的大小端模式解析) 二:浮点数的机器级表示 (见从如何判断浮点数是否等于0说起--浮点数的机器级表示) 三:c++的基本的内置类型: 1)算术类型,又包括: 整型(包括:整数int.short.long int类型,单个字符(分为存储单个机器字节的char类型,1个字节,char有三种不同的类型,普通char,unsigned char和sign

求大神解答一下-C++ primer plus 第6版 中文版 第16章复习题的一个问题

问题描述 C++ primer plus 第6版 中文版 第16章复习题的一个问题 奇葩的是课后居然没答案...... 求正规.严谨.简洁的标准答案! 程序清单16.15(在p708页):functor.cpp //functor.cpp--using a functor #include尖括号iostream尖括号 #include尖括号list尖括号 #include尖括号iterator尖括号 #include尖括号algorithm尖括号 template//functor class

C++ Primer 第一部分基本语言_C 语言

第1章 快速入门 1,介绍main函数的意义和其基本结构,return语句.不同平台下编译与执行程序.2,两个类isrteam与otream与它们的实例对象cin,cout,cerr,clog.说明了程序中基本的输入与输出."<<"与">>"作为操作符,左操作符是一个iostream 对象,右操作符是一个变量.返回值仍为一个iostream对象,所以输入或输出可以这样 cout<<"a="<<a&l

struct-C++primer第五版关于第七章类的一个问题

问题描述 C++primer第五版关于第七章类的一个问题 #include #include using namespace std; struct Sales_data{ Sales_data()=default; Sales_data(const string &s):bookNo(s){} Sales_data(const string &s,unsigned n,double p): bookNo(s),units_sold(n),revenue(p*n) {} Sales_dat

把《c++ primer》读薄(4-2 c和c++的数组 和 指针初探)

督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1.我们知道,将一个数组赋给另一个数组,就是将一个数组的元素逐个赋值给另一数组的对应元素,相应的,将一个vector 赋给另一个vector,也是将一个vector 的元素逐个赋值给另一vector 的对应元素: //将一个vector 赋值给另一vector,使用迭代器访问vector 中的元素 vector<int> ivec(10, 20); vector<int> ivec1; for (vecto

c++基础-C++ primer 中文版P461页

问题描述 C++ primer 中文版P461页 461页message类有一个地方不太明白: explicit Message(const std::string &str=""""): contents(str){} 这里加explicit属性是为什么呢?求大神指教^ ^谢谢 解决方案 显示构造函数,不要进行隐式转换,也就是编译器不会对你的对象赋值等情况进行类型转换,当你在不同类型赋值时,需要你代码明确指定, 解决方案二: 此处表明当其它类和Messag