一个C语言转义符识别问题。求大佬解答?

我们已知,通常一个基于转义符的 emoji 表情输入由以下三部分构成:转义符+表情名称+终止符。比如:当正文读取到一个转义符“["时,它与终止符“]"之间的文字将作为表情名称在表情库中进行搜索,如果存在匹配表情,则输出显示。而如果在一段语句中存在多个转义符和一个终止符,那么以离终止符最近的一个转义符作为表情的起始标志。

现在要求编写程序,在输入的一句文字中,输出被转义符括起来的表情名称文字。
1. 首先输入转义符,然后输入终止符,二者均为临时指定的任意半角标点符号,随后输入一行任意的文字,由英文、数字和符号组成。文字最长不超过140个字符;
2. 被转义符括起来的表情名称文字,如有多个表情名称,则分行输出。

输入输出样例如下:
转义符:*
终止符:#
输入文字: Time for lunch .* greedy # Hope a big meal .
输出: greedy
多个转义符以距离终止符最近的一个为准:
输入文字:* happy * smile #
输出: smile

注意输入文字中可能有空格,以及输入完单个字符后需要getchar()跳过回车

C代码和运行结果如下:

输入输出符合样例,望采纳~

附源码:

#include <stdio.h>

void emoji(char *txt, char s, char t) {

    int i, j, p = -1; // p记录转义符s的下标

    for (i = 0; txt[i] != '\0'; ++i) {

        if (txt[i] == s)

            p = i;

        else if (txt[i] == t && p >= 0 && p + 1 < i) { // 匹配到一个表情

            for (j = p + 1; j < i; ++j)

                printf("%c", txt[j]);

            return;

        }

    }

    printf("未匹配到表情");

}

int main() {

    char txt[141], s, t; // 转义和终止符

    printf("输入转义符: ");

    scanf("%c", &s);

    getchar(); // 跳过输入完转义符后的回车

    printf("输入终止符: ");

    scanf("%c", &t);

    getchar(); // 跳过输入完终止符后的回车

    printf("输入文字: ");

    scanf("%[^\n]", txt); // 输入一行包括空格在内的字符串,遇'\n'停止

    printf("输出: ");

    emoji(txt, s ,t);

    return 0;

}

温馨提示:内容为网友见解,仅供参考
无其他回答

一个C语言转义符识别问题。求大佬解答?
else if (txt[i] == t && p >= 0 && p + 1 < i) { \/\/ 匹配到一个表情 for (j = p + 1; j < i; ++j)printf("%c", txt[j]);return;} } printf("未匹配到表情");} int main() { char txt[141], s, t; \/\/ 转义和终止符 printf("输入转义符: ");scanf("%...

C语言转义字符的问题 望高手解答
书上写的有问题,转义字符的定义并不只是不可以显示的字符。控制符 :不能直接用字母描述,所以设计成转义字符。\\ :斜线自身本来是可以显示的,但因为它被当成转义标识,所以要通过\\\\进行转义。' :可以直接显示,但因为它被定义成字符的开始和结束标识(例如 char a = 'A';),所以要通过\\'进行...

C语言转义字符相关问题:
\\ddd是指向“\\034”这样的,\\xhh是指“\\x3f”这样的。因为有效Ascii字符有128个(其实有时认为有256个,后128个很特殊),用八进制表示只要三位,十六进制表示只要两位。如数字'0'的ASCII码为48,用八进制就是'\\060',用十六进制就是'\\x30'...

C语言中转义字符的问题
B是正确的,0x是前缀,后面的8f是十六进制,那'\\0x8f’的意思是十六进制数8f转换成十进制数,看这个十进制数是哪个字符的ASCII码,那么这个转义字符就是对应的那个字符

C语言怎样判断合法转义字符
和普通的字符判断相同,比如判断和'a'是否相同,ch=='a',那么判断转义一样,如ch=='\\n',逻辑表达式的结果只有两个,true和false,所有的逻辑表达式都一样,为真就是true,否则就是false。include<stdio.h> int main(){ char a[20]="abc\\'efgh";int i=0;for(i=0;i<20;i++){ if(...

C语言中如何判断是不是合法转义字符?
和普通的字符判断相同,比如判断和'a'是否相同,ch=='a',那么判断转义一样,如ch=='\\n',逻辑表达式的结果只有两个,true和false,所有的逻辑表达式都一样,为真就是true,否则就是false。include<stdio.h> int main(){ char a[20]="abc\\'efgh";int i=0;for(i=0;i<20;i++){ if(...

C语言 关于转义字符的问题
1 转义字符用于字符型常量或者整型时用',用于字符串常量则为",当然,用在字符串常量多个字符当中肯定不需要再加了:"xy\\n\\t123"2 原文是否是输出格式不同,第一个是%o输出,第二个%c输出 3 转义字符主要用于无法从键盘输入的字符,如果输出的是ascii码32-126之间的,会在显示器或者打印机上输出...

c语言转义字符的问题
二位十六进制 这个题目显然不是选B,刚才说过,\\a就是一个合法的转义字符.正确答案是选C,你可以参考我写的上文 说一下:A: \\\\是的,代表一个斜杠 B: \\a是的,说了,\\1011是的,它实际上就是\\v,(参考上面的表格)C: 都不是 D: \\101是的,它实际上就是\\a(二进制嘛)...

C语言中怎么判断转义字符是否合法
include <stdio.h> void main(){ char ch;ch='\\t';\/\/这是要判断的转义字符,可以换成要测试的。printf("%c\\n",ch);} \/\/若程序能运行,就认为转义符合法。

c语言中怎么判断一个转义字符是合法的?
转义字符就那么多 分为两类 一个是固定字母的 比如 \\t \\n 这个就只能背了 没什么办法 另一类就是通用的,包括8进制 16进制 8进制的 \\ooo 后面的ooo是1到3个合法的8进制字符。16进制 \\xhh 后面的hh是1到2个合法的16进制字符。符合以上的 就是合法的。 否则非法。

相似回答