ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

字符串入门 讲义

2019-09-02 23:55:33  阅读:229  来源: 互联网

标签:apple 字典 入门 banana 字符串 include 讲义 string


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

  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。

标签:apple,字典,入门,banana,字符串,include,讲义,string
来源: https://www.cnblogs.com/zifeiynoip/p/11450552.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有