请帮忙解决小弟弟函数中(转义字符)遇到的问题,谢谢

C语言 码拜 8年前 (2017-05-03) 1315次浏览
这段代码是想将通过一个escape函数将输入中的字符串t复制到字符串s中,并将t中的\n、\t转义字符序列转换为实际字符。
#include<stdio.h>
void escape(char s[],char t[]);
int main()
{
char s[2000];
char t[2000];
printf(“please input your character:”);
fgets(t,2000,stdin);
puts(t);
escape(s,t);
printf(“%s”,s);
return 0;
}
void escape(char s[],char t[])
{
int i,j;
for(i = j = 0;t[i] != “\0″;i++){
switch(t[i]){
case”\”:
switch(t[++i]){
case”n”:
s[j++] = “\n”;
break;
case”t”:
s[j++] = “\t”;
break;
default:
s[j++] = “\”;
s[j++] = t[i];
break;
}
break;
default:
s[j++] = t[i];
break;
}
}
s[j] = “\0”;
}
在这段代码中,当本人连续输入两个\之后跟上n或t,例如\n,\t,代码只识别第一个\,并输出第一个\,但是到第二个\的时候,代码不会识别下一个字符能否为n或t,导致输出结果还是原字符,\n输出\n(不会换行),\t输出\t(不会出现制表符),这是为什么呢?
解决方案

20

引用:
Quote: 引用:
#include<stdio.h>
void escape(char s[],char t[]);
int main()
{
    char s[2000];
    char t[2000];
    printf("please input your character:");
    fgets(t,2000,stdin);
    escape(s,t);
    printf("%s",s);
    return 0;
}
void escape(char s[],char t[])
{
    int i,j;
    for(i = j = 0; t[i]; i++){
        switch(t[i]){
            case"\n":
                s[j++] = "\";
                s[j++] = "n";
                break;
            case"\t":
                s[j++] = "\";
                s[j++] = "t";
                break;
            default:
                s[j++] = t[i];
                break;
        }
    }
    s[j] = "\0";
}

“\t”, “\n”都是一个字符,所以不能把它们看成一个字符。
但是假如输出时,你要用两个字符标识,即’\‘, ’t”, “\”, “n”
以上是改的demo,可以试一下。

谢谢了,本人还想问一下为什么本人的代码在这上边都是左对齐的,你的就很规整呢?

注意下表情符号前面的一个功能,那里面分不同的语言


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明请帮忙解决小弟弟函数中(转义字符)遇到的问题,谢谢
喜欢 (0)
[1034331897@qq.com]
分享 (0)