编程技能:字符串函数11,strrchr

专栏导航

本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏,故划分为两个专栏导航。读者可以自行选择前往哪个专栏。

(一)WIn32 专栏导航

上一篇:编程技能:字符串函数10,strchr

回到目录

下一篇:编程技能:字符串函数12,strtok

(二)MFC 专栏导航

上一篇:编程技能:字符串函数10,strchr

回到目录

下一篇:编程技能:字符串函数12,strtok

本节前言

上一节,我们学习了 strchr 函数。

本节,我们来学习 strrchr 。

一.    strrchr 的基本介绍

想要使用 strrchr 函数,如果是想要在 C 语言里面使用,那么,你需要有【#include <string.h>】一行。如果是想要在 C++ 里面使用,你需要有【#include <cstring>】一行。

下面,是 strrchr 函数的原型声明。

char * strrchr(const char * s, char c);

我在这里所列的原型声明,它只是我从 Linux 0.12 内核中提取出来的一种声明而已。在 Visual Studio 里面,它的声明形式不是这样子的。但是呢,我在这里列举出来的声明,它是可用的。

此函数的功能是,在 s 所指向的字符串里面,从左到右来查找,查找 ASCII 码值与参数 c 相等的字符。如果查到了,则返回最右边的匹配字符的指针。如果未查到,则返回 NULL 。

此函数不难。我们还是分别用 C 语言和 C++ 代码来演示它的使用方法。

二.    strrchr 的 C 语言代码示例

代码如下。

#include <stdio.h>
#include <string.h>

int main(void)
{
	int index;
	char* p;
	char str[] = "Windows Program Design";
	char ch = 'i';

	p = strrchr(str, ch);
	if (NULL == p)
	{
		printf("未查找到指定字符。\n");
	}
	else
	{
		index = p - str;
		printf("原字符串指针:%p\n", str);
		printf("查到的字符的指针:%p\n", p);
		printf("查到的字符的索引:%d\n", index);
	}

	return 0;
}

上述代码,是可以直接在 Visual Studio 里面运行的。

大家若是还不会使用 Visual Studio,可以参考下述链接所示的两篇文章,来学习使用 Visual Studio 来建立解决方案和编译运行解决方案的方法。

Windows编程:使用 VS2010 编写 C语言程序-CSDN博客

Windows编程:用 VS2019 编写C语言程序-CSDN博客

运算结果如下:

图1

请注意,在原始的字符串 "Windows Program Design" 中,【Windows】里面有一个 i,第三个单词【Design】里面也有一个 i 。显然,运算结果中的字符指针与索引,显然它所指的是【Design】里面的 i,而不是 【Windows】里面的 i 。如果某一个字符串里面存在着30个 i 。那么,返回值所指的 i,一定是从左往右数,最右边的那个 i 。

三.    strrchr 的 C++ 代码示例

代码如下。

#include <iostream>
#include <cstring>
using namespace std;

int main(void)
{
	int index;
	char* p;
	char str[] = "Windows Program Design";
	char ch = 'i';

	p = strrchr(str, ch);
	if (NULL == p)
	{
		cout << "未查找到指定字符。\n";
	}
	else
	{
		index = p - str;
		cout << "原字符串指针:" << (void*)str << endl;
		cout << "查到的字符的指针:" << (void*)p << endl;
		cout << "查到的字符的索引:" << index << endl;
	}

	return 0;
}

以上代码,我们需要注意的是以下两行。

cout << "原字符串指针:" << (void*)str << endl;
cout << "查到的字符的指针:" << (void*)p << endl;

为啥要将两个 char* 类型的变量转换为 void* 呢?如果不转换的话,对于 char* 类型,C++ 输出的将会是这个字符指针所指示的字符串。而将其转换为 void* 类型以后,输出的,就是指针了。

我的感觉,C++ 虽说强大。但是呢,很多时候,我还是更喜欢用 C 语言。因为它简洁,好用。C++ 的话,功能强大,语法的细节也太多。细节多的话,用起来自然就会比较繁琐。还是 C 语言简洁啊。

不过,在这个时代里面,用 C++ 来开发软件,仍然会是一种推荐的主要编程语言。纯粹用 C 语言来写程序,我觉得,大神有资格这么去做。我还没有这个资格啊。

结束语

本节的内容,我觉得并不难。

本节结束。

专栏导航

本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏,故划分为两个专栏导航。读者可以自行选择前往哪个专栏。

(一)WIn32 专栏导航

上一篇:编程技能:字符串函数10,strchr

回到目录

下一篇:编程技能:字符串函数12,strtok

(二)MFC 专栏导航

上一篇:编程技能:字符串函数10,strchr

回到目录

下一篇:编程技能:字符串函数12,strtok

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值