4.8 C++语言的系统函数

 

4.8 C++语言的系统函数

C++语言的编译系统提供了几百个函数供编程者调用。本节将介绍使用系统函数的方法,并且讲述字符串类的系统函数。

4.8.1 C++语言系统函数概述

C++语言系统将所提供的系统函数的说明分类放在不同的头文件(.h文件)中。例如:

  • 有关数学常用函数(如指数函数、对数函数、绝对值函数、立方根函数和三角函数及反三角函数等)放在math.h文件中。
  • 判断字母、数字、大写字母、小写字母等的函数放在ctype.h文件中。
  • 有关字符串处理的函数放在string.h文件中。
  • 屏幕处理函数放在conio.h中。
  • 图形处理函数放在graph.h中。

编程者在使用系统函数时,应该注意如下几点:

  1. 了解所使用的C++语言系统提供了哪些系统函数:不同的C++语言编译系统所提供的系统函数不同,同一种C++语言编译系统的不同版本所提供的系统函数的多少也不尽相同。只有了解系统所提供的系统函数后,才能根据需要进行选用。了解某个C++语言系统所提供的系统函数的方法是阅读该编译系统的使用手册,手册中会给出各种系统函数的功能、函数的参数和返回值以及函数的使用方法。另外,也可以通过联机帮助系统了解一些系统函数的简单情况。

  2. 知道某个系统函数说明在哪个头文件中:要调用某个系统函数,必须将该系统函数的说明所在的头文件包含在调用的程序中,否则连接不上,将报连接错。例如,要使用sqrt()函数求某个数的平方根时,就需要在程序中,将math.h头文件包含进去。math.h中有关于sqrt()函数的原型说明,如下所示:

    double sqrt(double);
    

    该原型说明将告诉你sqrt()的使用方法。即要求一个double型的参数,将对该参数值求平方根,并且返回一个double型的数。在使用时,应将该函数的返回值赋给一个double型的变量,否则需要进行强制类型转换。不然的话,可能出现类型不匹配的警告错。

  3. 调用一个函数时,一定要将该函数的功能、参数和返回值搞清楚:否则难以正确使用这个函数。

例4.25 编程求出30°角的正弦值、余弦值和正切值。程序如下:

#include <iostream.h>
#include <math.h>

const double pi = 3.14159265;

void main() {
    double i = 30 * pi / 180;
    double x = sin(i);
    double y = cos(i);
    double z = tan(i);
    cout << "sin(30) = " << x << endl;
    cout << "cos(30) = " << y << endl;
    cout << "tan(30) = " << z << endl;
}

执行该程序输出结果如下:

sin(30) = 0.5
cos(30) = 0.866025
tan(30) = 0.57735

该程序中,调用了包含在math.h中的三个函数sin()cos()tan()。这三个函数的原型说明如下:

double sin(double x);
double cos(double x);
double tan(double x);

其中,x是弧度值。1° = π/180弧度。

4.8.2 字符串处理函数

字符串处理函数放在string.h头文件中,调用字符串处理函数时,要包含该头文件。下面列举一些常用的字符串处理函数的功能、原型及其使用方法。

1. 字符串长度函数strlen()

该函数的功能是返回一个字符串的长度。该函数原型说明如下:

int strlen(const char *s);

该函数将计算字符指针s所指向的字符串的长度,即字符串中包含的有效字符的个数,空字符不计算在内。

例4.26 计算已知字符串的长度。程序内容如下:

#include <iostream.h>
#include <string.h>

void main() {
    char s1[] = "abc mnp";
    char *s2 = "hello!";
    char s3[80];
    cout << "Input a word: ";
    cin >> s3;
    cout << "s1: " << strlen(s1) << endl;
    cout << "s2: " << strlen(s2) << endl;
    cout << "s3: " << strlen(s3) << endl;
    cout << strlen("iostream.h") << endl;
}

执行该程序时,显示如下信息:

Input a word: programming

输出结果如下:

s1: 7
s2: 6
s3: 11
11

说明:该程序中4次调用求字符串长度函数strlen()。每次调用时给定参数的方法是不同的,有字符数组名、字符指针名,还有字符串常量。

2. 字符串复制函数strcpy()

该函数的功能是用一个字符串去更新另一个字符串,进而实现字符串的复制。该函数原型说明如下:

char *strcpy(char *s1, const char *s2);

其中,s1s2是字符指针或者字符数组,而s2的字符串是已知的。该函数将s2所指向的字符串复制到s1所指向的字符数组中。然后返回s1的地址值。该函数是一个指针函数,因为它的返回值是一个指向char型的指针。调用这个函数时,请注意:必须保证s1所指向的对象能够容纳下s2所指向的字符串,否则将出现数据混乱。

例4.27 使用字符串复制函数将一个已知字符串复制给一个字符数组。程序内容如下:

#include <iostream.h>
#include <string.h>

void main() {
    char s1[8], s3[8];
    char s2[] = "string";
    strcpy(s1, s2);
    strncpy(s3, s1, 3);
    s3[3] = '\0';
    cout << "s1: " << s1 << endl;
    cout << "s3: " << s3 << endl;
    char *s4 = strcpy(s3, strcpy(s1, s2));
    cout << "s4: " << s4 << endl;
}

该程序执行后,输出如下结果:

s1: string
s3: str
s4: string

说明:该程序有以下几点值得注意。

  1. strcpy()函数的第一个参数所使用的字符数组要足够大,能够将第二个参数所指的字符串容纳下。

  2. 字符串复制函数还有一个下述所示的函数原型说明:

    char *strncpy(char *s1, const char *s2, int n);
    

    其中,n是一个int型数,用来表示仅将s2所指定的字符串中前n个字符复制到s1中。使用该函数时,在复制完成后,要对新的字符数组加上一个字符串结束符\0

  3. 使用strcpy()函数时,第一个参数被更新,而第二个参数保持内容不变,返回的是第一个参数的指针。

  4. 程序中,注意下述的函数调用:

    strcpy(s3, strcpy(s1, s2));
    

    调用中,将strcpy(s1, s2)的返回值作为函数参数,因为strcpy()返回一个char型指针,即s1所指向的字符串。这样调用实际上是将s2中的字符串先复制给s1,再将s1的字符串复制给s3。因此,s1s2s3中都有相同的字符串;又将其复制给s4,使它也具有与s1s2s3相同的字符串。

3. 字符串连接函数strcat()

该函数的功能是将一个字符串添加到另一个字符串的后面,形成一个包含了两个字符串的新字符串。该字符串连接函数的原型说明如下:

char *strcat(char *s1, const char *s2);

其中,s1s2都是字符指针或字符数组,该函数用来返回指针参数s1的值。注意,调用该函数时,必须保证s1所指向的对象有足够的空间能够容纳s2所添加的字符串。一般要求,s1所指的对象不小于strlen(s1) + strlen(s2) + 1

例4.28 使用字符串连接函数连接字符串。分析下列程序的输出结果:

#include <iostream.h>
#include <string.h>

void main() {
    char s1[30] = "first";
    char s2[20] = "second";
    char s3[10] = "third";
    char s4[30];
    strcpy(s4, s1);
    strcat(s4, s2);
    strcat(s4, s3);
    cout << "s4: " << s4 << endl;
    cout << strcat(s1, strncat(s2, s3, 3)) << endl;
}

执行该程序输出如下结果:

s4: firstsecondthird
firstsecondth

说明:

  1. 该程序中使用了字符串复制函数strcpy()、字符串连接函数strcat()strncat()。其中,strncat()函数的原型说明如下:

    char *strncat(char *s1, const char *s2, int n);
    

    其中,n是一个int型数,用来表示仅将s2所指定的字符串中前n个字符连接到s1中。

这些字符串处理函数用来在C++语言中处理字符串时不是很方便,因此,在标准C++语言中,使用string类可以更加方便地实现字符串的处理。

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏驰和徐策

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值