《c++ primer, 5E》

第68页到第81页,笔记:

1、读取未知量的string对象示例

#include<iostream>
using std::cin;
using std::cout;
using std::endl;
#include<string>
using std::string;

    int main()
    {
        string word;
        while(cin >> word)
            cout << word << endl;
        return 0;
    }

 

2、使用getline读取一行示例

    #include<iostream>
    using std::cin;
    using std::cout;
    using std::endl;
    #include<string>
    using std::string;

                int main()
                {
                        string line;
                        while(getline(cin , line))
                                    cout << line << endl;
                        return 0;
                }

3、string_A.empty()、string_A.size()

4、string_A.size()返回值是一个无符号的整数,不要在表达式中与有符号的int型混用

5、string比较大小按照字典序,大小写敏感!

6、字符串字面值与string是不同的类型。不能把字面值直接相加,必须确保每个加法运算 + 两侧的运算对象至少有一个是string

遇到的问题:

课后练习:

练习3.1

1

#include<iostream>
using std::cout;
using std::endl;
int main()
{
    int sum = 0;
    for(int val = 50; val <= 100; ++val)
        sum += val;
    cout << sum << endl;
    return 0;
}

 

2

#include<iostream>
using std::cout;
using std::endl;
int main()
{
    int sum = 0;
    for(int val = 10; val >= 0; --val)
        cout << val << endl;
    return 0;
}

 

3

#include<iostream>
using std::cout;
using std::endl;
using std::cin;
int main()
{
    int a, b;
    cin >> a >> b;
    for(int val = a; val <= b; ++val)
        cout << val << endl;
    return 0;
}

 

4

#include<iostream>
#include<string>
using std::cout;
using std::cin;
using std::endl;
using std::string;
struct Sales_data{
    string bookNo;
    unsigned units_sold = 0;
    double price = 0.0;
    double revenue = 0.0;
};
int main()
{
    Sales_data data;
    // std::cin >> data;
    cin >> data.bookNo >> data.units_sold >> data.price;
    // std::cout << data;
    cout << data.bookNo << " " << data.units_sold << " " << data.price << endl;
    return 0;
}

 

5

#include<iostream>
#include<string>
using std::cout;
using std::cin;
using std::endl;
using std::string;
struct Sales_data{
    string bookNo;
    unsigned units_sold = 0;
    double price = 0.0;
    double revenue = 0.0;
};
int main()
{
    Sales_data data1, data2;
    // std::cin >> data1 >> data2;
    cin >> data1.bookNo >> data1.units_sold >> data1.price;
    cin >> data2.bookNo >> data2.units_sold >> data2.price;
    // std::cout << data1 + data2;
    cout << data1.bookNo << " " << data1.units_sold + data2.units_sold << " " << data1.price << endl;
    return 0;
}

 

6

#include<iostream>
#include<string>
using std::cout;
using std::cin;
using std::endl;
using std::string;
struct Sales_data{
    string bookNo;
    unsigned units_sold = 0;
    double price = 0.0;
    double revenue = 0.0;
};
int main()
{
    Sales_data data, sum_data;
    while(cin >> data.bookNo >> data.units_sold >> data.price)
        sum_data.units_sold += data.units_sold;
    cout << data.bookNo << " " << sum_data.units_sold << " " << data.price << endl;
    return 0;
}

 

7

#include<iostream>
#include<string>
using std::string;
using std::cout;
using std::cin;
using std::endl;
struct Sales_data{
    string bookNo;
    unsigned units_sold = 0;
    double price = 0.0;
    double revenue = 0.0;
};
int main()
{
    int num = 0;
    string last_bookNo;
    Sales_data temp_data;
    // 读取第一个
    // std::cin >> temp_data;
    cin >> temp_data.bookNo >> temp_data.units_sold >> temp_data.price;
    last_bookNo = temp_data.bookNo;
    num = 1;
    // while(cin >> temp_data){
    while(cin >> temp_data.bookNo >> temp_data.units_sold >> temp_data.price){
        if(temp_data.bookNo == last_bookNo){
            ++num;
        }
        else{
            cout << last_bookNo << " " << num;
            last_bookNo = temp_data.bookNo;
            num = 1;
        }
    }
    cout << last_bookNo << " " << num;
    return 0;
}

 

8

#include<iostream>
#include<string>
using std::cerr;
using std::string;
using std::cin;
using std::cout;
using std::endl;
struct Sales_data{
    string bookNo;
    unsigned units_sold = 0;
    double price = 0.0;
    double revenue = 0.0;
};
int main()
{
    Sales_data total;
    if(cin >> total.bookNo >> total.units_sold >> total.price){
        Sales_data trans;
        // while(cin >> total)
        while(cin >> trans.bookNo >> trans.units_sold >> trans.price){
            if(total.bookNo == trans.bookNo){
                total.units_sold += trans.units_sold;
            }else{
                // std::cout << total << std::endl;
                cout << total.bookNo << " " << total.units_sold << " " << total.price << endl;
                // total = trans;
                total = trans;
            }
        }
        cout << total.bookNo << " " << total.units_sold << " " << total.price << endl;
    }else{
        cerr << "No data?" << endl;
        return -1;
    }
    return 0;
}

 

练习3.2

1

    #include<iostream>
    using std::cin;
    using std::cout;
    using std::endl;
    #include<string>
    using std::string;

                int main()
                {
                        string line;
                        while(getline(cin , line))
                                    cout << line << endl;
                        return 0;
                }

2

#include<iostream>
using std::cin;
using std::cout;
using std::endl;
#include<string>
using std::string;

    int main()
    {
        string word;
        while(cin >> word)
            cout << word << endl;
        return 0;
    }

 

练习3.3

string类的输入运算符将空白字符作为分隔符,

string类的getline函数将空白符作为字符读入字符串。

 

练习3.4

1

#include<iostream>
using std::cout;
using std::cin;
using std::endl;
#include<string>
using std::string;
int main()
{
    string s1, s2;
    cin >> s1 >> s2;
    if(s1 == s2)
        cout << "Equal" << endl;
    else if(s1 > s2)
        cout << s1 << endl;
    else
        cout << s2 << endl;
    return 0;
}

2

#include<iostream>
using std::cout;
using std::cin;
using std::endl;
#include<string>
using std::string;
int main()
{
    string s1, s2;
    cin >> s1 >> s2;
    if(s1.size() == s2.size())
        cout << "Equal" << endl;
    else if(s1.size() > s2.size())
        cout << s1 << endl;
    else
        cout << s2 << endl;
    return 0;
}

 

练习 3.5

1

#include<iostream>
using std::cout;
using std::cin;
using std::endl;
#include<string>
using std::string;
int main()
{
    string sum_string;
    string temp_string;
    while(cin >> temp_string)
        sum_string += temp_string;
    cout << sum_string << endl;
    return 0;
}

2

#include<iostream>
using std::cout;
using std::cin;
using std::endl;
#include<string>
using std::string;
int main()
{
    string sum_string;
    string temp_string;
    while(cin >> temp_string)
        sum_string += temp_string + " ";
    cout << sum_string << endl;
    return 0;
}