C++ primer 练习9.49

如果一个字母延伸到中线之上,如d或f,则称其有上出头部分。如果一个字母延伸到中线之下,如p或g,

则称其有下出头部分。编写程序,读入一个单词,输出最长的即不包含上出头部分,也不包含下出头部分单

词。

// 9_49.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<string>
#include<iostream>
using namespace std;

string& func(string &str)
{
    string ascenderAndDescender = "bdfghjklpqty";//把上出头部分和下出头部分的字母包含进来
    static string maxLengthStr = "";             //用来储存最长的要求字符串
    int pos = 0,posAAD=0;                        //pos用来表示所要求字符的位置,posADD用来表示上出头或者下出头字符的位置
    while ((pos = str.find_first_not_of(ascenderAndDescender, posAAD)) != str.npos)//求第一个所要求字符的位置
    {
        if ((posAAD = str.find_first_of(ascenderAndDescender, pos)) != str.npos&&maxLengthStr.size() < (posAAD - pos))
        {                                                            //求第一个上出头或者下出头字符的位置
            maxLengthStr = string(str,pos,posAAD-pos);               //如果新的所要求的字符串长度教大,赋予它新值
        }
    }
    if (pos = str.find_last_not_of(ascenderAndDescender,0) && maxLengthStr.size() < (str.length() - pos))
        maxLengthStr = string(str,pos);                              //这是为了检验有可能在最后的情况
    return maxLengthStr;
}

int main()
{
    string str = "asaaaaaaashgasjgpdhgasjqwghnaanbmnna";
    cout << func(str) << endl;
    return 0;
}

// 9_49.cpp : 定义控制台应用程序的入口点。//
#include "stdafx.h"#include<string>#include<iostream>using namespace std;
string& func(string &str){string ascenderAndDescender = "bdfghjklpqty";//把上出头部分和下出头部分的字母包含进来static string maxLengthStr = "";             //用来储存最长的要求字符串int pos = 0,posAAD=0;                        //pos用来表示所要求字符的位置,posADD用来表示上出头或者下出头字符的位置while ((pos = str.find_first_not_of(ascenderAndDescender, posAAD)) != str.npos)//求第一个所要求字符的位置{if ((posAAD = str.find_first_of(ascenderAndDescender, pos)) != str.npos&&maxLengthStr.size() < (posAAD - pos)){                                                            //求第一个上出头或者下出头字符的位置maxLengthStr = string(str,pos,posAAD-pos);               //如果新的所要求的字符串长度教大,赋予它新值}}if (pos = str.find_last_not_of(ascenderAndDescender,0) && maxLengthStr.size() < (str.length() - pos))maxLengthStr = string(str,pos);                              //这是为了检验有可能在最后的情况return maxLengthStr;}
int main(){string str = "asaaaaaaashgasjgpdhgasjqwghnaanbmnna";cout << func(str) << endl;    return 0;}

时间: 2024-11-05 22:32:45

C++ primer 练习9.49的相关文章

C++ 常量引用与临时变量

由 <<C++ Primer>> 练习7.49 (b) 产生出来的小问题. 总结: 1.不要对临时变量进行改变.要传递临时变量,得用常量引用. 2. 当引用不需要更改时,用const引用. 问题: struct Sales_data { Sales_data() = default; Sales_data(std::string &str){} Sales_data& combine( Sales_data&); }; Sales_data& Sal

C++primer 9.49

题目:如果一个字母延伸到中线之上,如d或f,则称其有上出头部分(ascender).如果一个字母延伸到中线之下,如p或g,则称其有下出头部分(descender).编写程序,读入一个单词文件,输出最长的既不包含上出头部分,也不包含下出头部分的单词. #include<iostream> #include<string> #include<vector> #include<fstream> using namespace std; void find_max(

【足迹C++primer】49、超载,更改,运营商

超载,更改.运营商 Conversion Operators 转换操作符 operator type() const Conversions to an array or a function type are not permitted. 转换函数必须是成员函数.不能指定返回 类型,必须有一个空的參数列表. 函数通常应 const. Defining a Class with a Conversion Operator(献给热爱英语的朋友) 定义一个类,表示一个在0到255范围类的一个整数 c

【足迹C++primer】49、重载,转换,运算符

重载,转换,运算符 Conversion Operators 转换操作符 operator type() const Conversions to an array or a function type are not permitted. 转换函数必须是成员函数,不能指定返回 类型,必须有一个空的参数列表. 函数通常应 const. Defining a Class with a Conversion Operator(献给热爱英语的朋友) 定义一个类,表示一个在0到255范围类的一个整数 c

【共读Primer】49.[6.3]返回类型和return语句--关于返回值 Page201

值是如何被返回的 返回值用于初始化调用点的一个临时量. 在下面的函数中,返回值的内容是被拷贝到调用点 string make_plural(size_t ctr, const string &word, const string &ending) { return (ctr > 1) ? word + ending : word; } 在下面的函数中则是将引用型参数作为返回值直接返回了参数的引用 const string & shorterString(const strin

C++primer 15.7.3节练习

练习15.26 写的时候不小心写到了派生类Disc_quote,其实是一样的,主要明白原理即可 1 #include <iostream> 2 #include <string> 3 #include <utility> 4 #include <memory> 5 #include <vector> 6 7 using namespace std; 8 9 class Quote { 10 public: 11 Quote() : bookNo(

C++Primer 5th 练习 12.19

这阵子真是太忙了, 连续做了四个课设. 当然这并不能作为好久没写博客的借口, 没写博客的主要原因只有一个: 懒. 最近又开始回顾C++的语法与特性(据说C++就是一门需要反复回顾的语言),以及学习C++的编程规范. 敲了C++Primer 5th 上的一道典型的练习题,纪念一下这即将过去的2016. 题目描述: 定义你自己版本的 StrBlobPtr, 更新 StrBlob类, 加入恰当的 friend 声明及begin 和 end 成员. 这道题目主要是练习 智能指针 share_ptr 和

c++ primer plus 习题答案(1)

第五版c++ primer plus,IDE是visual studio2013. p180.2 1 #include<iostream> 2 #include<ctime> 3 #include<cstdlib> 4 5 int main(void){ 6 using namespace std; 7 int i, j, count=0, sum = 0, pt[10]; 8 double mean; 9 for (i = 0; i < 10; i++){ 10

454ITS数据按barcode和primer分类程序v1.0

不知道有什么好办法可以让primer允许漏配,现在仅仅是允许错配,还是有一些没有配上,454数据有些primer漏配了一些,下一步解决这个问题 1 #include <cstdio> 2 #include <cstdlib> 3 #include <string> 4 #include <iostream> 5 #include <fstream> 6 #include <iomanip> 7 #include <getopt.