C++笔试题:怎么分析\abc,a、b、c均为数字的情况下\abc是否为转义字符?

问以下代码的输出:

#include<iostream>
int main()
{
	char str[] = "\ta\045pg";
	int len = strlen(str);
	std::cout << len << std::endl;

	return 0;
}

输出为:

解释:以下定义一个指针,指向字符串的对头地址,依次打印五个字符。

#include<iostream>
int main()
{
	char str[] = "\ta\045pg";
	char* ptr = str;
    std::cout << *(ptr ) << std::endl;
    std::cout << *(ptr +1) << std::endl;
	std::cout << *(ptr +2) << std::endl;
    std::cout << *(ptr +3) << std::endl;
    std::cout << *(ptr +4) << std::endl;	
	int len = strlen(str);
	int size = sizeof(str);
	std::cout <<"len " << len << " size " << size << std::endl;
}

根据如下转义字符表,\t、\045(\ddd),所以字符的len5,size=6(字符默认以’\0‘结尾,所以size=len+1).

那怎么判断\加数字是不是转义字符呢?

以\ddd为例:\ddd为八进制转义字符,最大为\377(因为八进制转义字符占八个二进制的字符常量)。尽管3个八进制数最大为777,对应二进制数为1 1111 1111但因为超过八个字符,\ddd最大的二进制数为1111 1111转换成八进制就是\377。

对于超过\377的情况\abc(其中abc是数字)

case1:

\379,\389之类,某位开始大于7的,只截取前面的\37,\3:

#include<iostream>
int main()
{
	char str[] = "\ta\379pg";
	int len = strlen(str);
	char* ptr = str;

	std::cout << *(ptr) << std::endl;
	std::cout << *(ptr + 1) << std::endl;
	std::cout << *(ptr + 2) << std::endl;
	std::cout << *(ptr + 3) << std::endl;
	return 0;

}

case2:

\444三个数字,但是超出\377会报错

将会报错:

如果是\931则是字符'9','8','7',因为第一个数字已经超过7,明显不可能是转义字符,\不成立。

#include<iostream>
int main()
{
	char str[] = "\ta\931pg";
	int len = strlen(str);
	char* ptr = str;
	std::cout << *(ptr) << std::endl;
	std::cout << *(ptr + 1) << std::endl;
	std::cout << *(ptr + 2) << std::endl;
	std::cout << *(ptr + 3) << std::endl;
	std::cout << "len " << len << std::endl;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值