zoukankan      html  css  js  c++  java
  • 字符串入门 讲义

    在字符串入门部分,我们主要讲解一下字符串的两种表示方式:

    1. 字符数组 char s[100]
    2. 字符串 string

    字符数组

    我们用 char 定义一个字符,用 char 类型的数组来表示字符串,这是用字符数组的形式来表示的字符串。

    字符串的定义及初始化

    我们可以使用如下方式来定义一个字符串:

    char ch[100];
    

    这个字符串名为 ch ,是一个长度为 100 的字符数组。
    我们也可以在定义的时候初始化,初始化的方式有两种。
    第一种初始化方式是和其它类型(如int、float)的数组一样的初始化方式:

    char ch[5] = { 'a', 'p', 'p', 'l', 'e' };
    

    这样就定义好了一个字符数组,其中:

    • ch[0] 为 'a';
    • ch[1] 为 'p';
    • ch[2] 为 'p';
    • ch[3] 为 'l';
    • ch[4] 为 'e'。

    对于字符数组来说,因为我们在C++中是使用双引号来表示字符串的,所以我们也可以使用如下方式来初始化字符数组:

    char ch[5] = "apple";
    

    但是赋值符号((=))只能用于初始化的时候,不能用在初始化以外的地方。
    那么如何在初始化以外的地方修改字符串的内容呢?
    接下来就到了我们的字符串函数出场的时候了。
    要使用字符串函数,我们需要引入字符串函数相关的头文件:#include <cstring>
    然后我们介绍一下常用的字符串函数:

    字符串拷贝函数

    strcpy(s, t) : 该函数用于将字符串 t 的内容赋值给 s 。
    示例程序:

    #include <iostream>
    #include <cstring>
    using namespace std;
    char a[10], b[10], c[] = "apple";
    int main() {
        strcpy(a, c);
        strcpy(b, "banana");
        cout << "a = " << a << endl;
        cout << "b = " << b << endl;
        return 0;
    }
    

    程序输出结果:

    a = apple
    b = banana
    

    因为我们在初始化的时候开了三个字符数组a、b、c,同时将 c 的内容初始化为"apple",然后使用 strcpy(a, c); 将 c 的内容复制给了 a ;使用 strcpy(b, "banana"); 将 "banana" 复制给了 b。

    字符串长度函数

    strlen(s):该函数用于返回字符串的长度。
    示例程序:

    #include <iostream>
    #include <cstring>
    using namespace std;
    char s[110];
    int main() {
        cin >> s;
        cout << strlen(s) << endl;
        return 0;
    }
    

    样例输入:

    apple
    

    样例输出:

    5
    

    字符串比较函数

    strcmp(a,b):该函数用于比较字符串 s 和 t 的字典序比较结果。
    一个字符串的字典序指的是该字符串出现在字典中的顺序,或者我们也可以理解为该字符串出现在字典中的页码。
    比如,我们比较两个字符串 "apple" 和 "banana" ,因为 "apple" 出现在字典中的顺序(页码)比 "banana" 要早,所以我们说:"apple" 比 "banana" 的字典序小;"banana" 比 "apple" 的字典序大。
    我们再回到 strcmp(a,b) 函数:

    • 如果 a 的字典序小于 b ,则 strcmp(a,b) 返回 (-1)
    • 如果 a 和 b 相同,则 strcmp(a,b) 返回 (0) (我们可以通过 strcmp(a,b)==0 这个条件来判断他们是否是相同的字符串);
    • 如果 a 的字典序大于 b ,则 strcmp(a,b) 返回 (1)

    示例程序:

    #include <iostream>
    #include <cstring>
    using namespace std;
    char a[] = "apple", b[] = "banana";
    int main() {
        cout << strcmp(a, b) << endl;
        cout << strcmp(a, a) << endl;
        cout << strcmp(b, a) << endl;
        return 0;
    }
    

    程序输出:

    -1
    0
    1
    

    字符串string

    C++的 STL容器 提供给我们很多现成的工具来简化我们的操作,比如其中用来模拟字符串的 string (string就是“字符串”的英文)。
    要使用 string ,我们需要包含头文件 #include <string>

    注意点

    我们不包含任何头文件也可以定义字符数组(char ch[110];)。
    但是对于字符数组相关的函数(比如 strcmpstrlenstrcpystr 开头的函数),我们在使用之前需要包含头文件 #include <cstring>,注意这个头文件有一个开头的 c ,用来表示这是从 C 语言里面继承过来的头文件。
    而对于 string 来说,不管是定义 string 类型的变量,还是使用 string 的一些方法,我们都需要引入 #include <string> 头文件,注意这个头文件没有开头的 c
    <cstring><string> 是不同的头文件,注意区分。

    string的定义

    我们可以使用如下方式定义一个 string 类型的变量 s:

    string s;
    

    也可以在定义的时候初始化:

    string s = "apple";
    

    这样就将 s 在定义的时候初始化为了 "apple" 。

    string的长度

    如果我们定义了一个 string 类型的变量 s ,那么我们可以使用 s.length() 或者 s.size() 方法来获得 s 的长度。这两个函数返回的结果是一样的,即字符串 s 的长度。
    示例程序:

    #include <iostream>
    #include <string>
    using namespace std;
    int main() {
        string s = "apple";
        cout << s.length() << " , " << s.size() << endl;
        return 0;
    }
    

    输出结果:

    5 , 5
    

    string比较字典序

    我们可以使用两种方式来比较 string 的字典序。

    方式一 :使用 s.compare(t) 来比较 s 和 t 的字典序。

    • 如果 s 的字典序比 t 小,会返回 (-1)
    • 如果 s 等于 t ,会返回 (0)
    • 如果 s 的字典序比 t 大,会返回 (1)

    示例程序:

    #include <iostream>
    #include <string>
    using namespace std;
    int main() {
        string s = "apple", t = "banana";
        cout << s.compare(t) << endl;   // 返回-1,因为s的字典序比t小
        cout << s.compare(s) << endl;   // 返回0,因为s和s相等
        cout << t.compare(s) << endl;   // 返回1,因为t的字典序比s大
        cout << s.compare("abc") << endl;   // 返回1,因为s的字典序比"abc"大
        return 0;
    }
    

    方式二 :我们可以直接使用比较符号(>>=<<===!=)来直接比较两个字符串的字典序。
    假设我们定义了两个 string 类型的字符串 s 和 t ( string s, t; ),然后我们可以:

    • 使用 s < t 来判断 s 的字典序是否小于 t;
    • 使用 s <= t 来判断 s 的字典序是否小于或等于 t;
    • 使用 s > t 来判断 s 的字典序是否大于 t;
    • 使用 s >= t 来判断 s 的字典序是否大于或等于 t;
    • 使用 s == t 来判断 s 是否等于 t;
    • 使用 s != t 来判断 s 是否不等于 t。

    示例程序:

    #include <iostream>
    #include <string>
    using namespace std;
    int main() {
        string s = "banana";
        if (s < "peach") {
            cout << "banana的字典序比peach小" << endl;
        }
        if (s > "apple") {
            cout << "banana的字典序比apple大" << endl;
        }
        return 0;
    }
    

    程序会输出:

    banana的字典序比peach小
    banana的字典序比apple大
    

    string字符串之间的衔接

    我们可以使用 “+” 号来衔接两个 string 类型的字符串。
    示例程序:

    #include <iostream>
    #include <string>
    using namespace std;
    int main() {
        string s = "apple", t = "banana";
        cout << s + t << endl;
        s = s + "HAHA" + s;
        cout << s << endl;
        return 0;
    }
    

    该程序的输出如下:

    applebanana
    appleHAHAapple
    

    第一次我们输出了 s 和 t 衔接后的结果;
    第二次我们首先将 s 变成了 s + "HAHA" + s,然后我们再输出 s。

  • 相关阅读:
    ssh session 共享
    python 快速开启http服务
    GCC 默认头文件搜索路径
    GCC 部分单元测试编译失败
    随机森林与GBDT
    DecisionTree
    SVM
    KDDCUP CTR预测比赛总结
    剑指offer-java
    搜狗搜索日志传输与分析
  • 原文地址:https://www.cnblogs.com/zifeiynoip/p/11450552.html
Copyright © 2011-2022 走看看