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

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

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

输入输出样例如下:
转义符:*
终止符:#
输入文字: Time for lunch .* greedy # Hope a big meal .
输出: greedy
多个转义符以距离终止符最近的一个为准:
输入文字:* happy * smile #
输出: smile
展开
 我来答
xgn911
2022-12-12 · TA获得超过1363个赞
知道小有建树答主
回答量:1493
采纳率:96%
帮助的人:649万
展开全部

注意输入文字中可能有空格,以及输入完单个字符后需要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;

}

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式