【暖*墟】 #C++相关设定# 转义字符

C++中的转义字符用于表示特殊的ASCII字符,如 用于换行, 用于制表,ddd用于八进制表示,xhh用于十六进制表示。这些字符在代码中有着特定的含义,例如在文本输出和控制台输入中起到关键作用。了解转义字符有助于更好地理解和编写C++代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。

而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,

如\0,\t,\n等,就称为转义字符。因为后面的字符,都不是它本来的ASCII字符意思了。

所以,如果有关字符“\”的时候,通常用“\\”表示。

【洛谷 p2243】电路维修 的代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#include<map>
#include<set>
#include<queue>
#include<deque> //双端队列
using namespace std;

const int MAXX=550;
int dis[MAXX][MAXX];
bool vis[MAXX][MAXX],Map[MAXX][MAXX];
int dx[4]={1,-1,1,-1};
int dy[4]={1,-1,-1,1}; //矩形中的边的扩展方向
char ss[MAXX];
int t,r,c; 

inline bool checks(int x,int y){ //检查是否到边界
    if(x>=1&&y>=1&&x<=r+1&&y<=c+1) 
    	return true;
    return false;
}

inline int edges(int x,int xx,int y,int yy){
    if((xx<x&&yy<y)||(xx>x&&yy>y))
    	return !Map[min(x,xx)][min(y,yy)];
    else return Map[min(x,xx)][min(y,yy)];
}

inline void bfs(){
    Map[0][0]=1; //广搜起点
    deque< pair < pair<int ,int> ,pair<int ,int > > >q; //二元组队列
    pair<int ,int > u=make_pair(0,0); //原点连向(1,1)
    pair<int ,int > v=make_pair(1,1);
    q.push_back(make_pair(u,v)); //加入一条边(此时只有一条边,无论首尾)
    dis[0][0]=0; //广搜起点
    while(!q.empty()){ //↓↓取出队首
        pair< pair<int ,int > , pair<int ,int > >k=q.front();
        q.pop_front(); //扔出队首
        pair<int ,int >u=k.first; //找出队首边的对应点
        pair<int ,int >v=k.second; //u连向v
        int xx=u.first; int yy=u.second; //表示两点的坐标
        int x=v.first; int y=v.second;
        if(vis[x][y]) continue; //记忆化剪枝(点)
        dis[x][y]=dis[xx][yy]+edges(x,xx,y,yy);
        vis[x][y]=1; //标记
        for(int i=0;i<4;++i){
            int xv=x+dx[i]; int yv=y+dy[i];
            pair<int ,int >s=make_pair(xv,yv);
            if(checks(xv,yv)&&!vis[xv][yv]){
                if(edges(xv,x,yv,y)) q.push_back(make_pair(v,s));
                else q.push_front(make_pair(v,s));
            }
        }
    }
}

int main(){
    scanf("%d",&t);
    while(t--){
        memset(dis,0,sizeof(dis)); //注意清零
   		memset(vis,0,sizeof(vis));
        scanf("%d%d",&r,&c); //矩形长宽
        for(int i=1;i<=r;++i){
            scanf("%s",ss+1); //从字符串1号位开始存
            for(int j=1;j<=c;++j)
            if(ss[j]=='\\') Map[i][j]=1; //【!!!】注意"\"的使用
            else Map[i][j]=0;
        }
        bfs();
        if(vis[r+1][c+1]) printf("%d\n",dis[r+1][c+1]); //到达终点
        else printf("NO SOLUTION\n");
    }
    return 0;
}

 

转义字符的意义:ASCII码值(十进制)

  • \a:蜂鸣,响铃
  • \b:回退:向后退一格
  • \f:换页
  • \n:换行,光标到下行行首
  • \r:回车,光标到本行行首
  • \t:水平制表
  • \v:垂直制表
  • \\:反斜杠
  • \':单引号
  • \":双引号
  • \?:问号
  • \ddd:三位八进制
  • \xhh:二位十六进制
  • \0:空字符(NULL),什么都不做

注:

1,\v垂直制表和\f换页符对屏幕没有任何影响,但会影响打印机执行响应操作。

2,\n其实应该叫回车换行。换行只是换一行,不改变光标的横坐标;

      回车只是回到行首,不改变光标的纵坐标。

3,\t 光标向前移动四格或八格,可以在编译器里设置

4,\' 在字符里(即单引号里)使用。在字符串里(即双引号里)不需要,只要用 ' 即可。

5,\? 其实不必要。只要用 ? 就可以了(在windows VC6 和tc2 中验证)。 

 

 

                                               ——时间划过风的轨迹,那个少年,还在等你。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值