转义字符的输入与输出

i945800687 2011-12-11 01:12:11
编写一个函数escape(s, t),将字符串t复制到字符串s中,并在复制过程中将换行符、制表符等不可显示字符分别转换为\n、
\t等相应的可显示的转义字符序列。要求使用switch语句。再编写一个具有相反功能的函数,在复制过程中将转义字符序列转换为实际字符。



/*
不可显示转显示
*/

#include <stdio.h>

#define MAXLINE 100

void escape(char s[], char t[]);

int main()
{
char s[MAXLINE], t[MAXLINE];

printf("Input string: ");
gets(t);
escape(s, t);

printf("s: %s\n", s);

return 0;
}

void escape(char s[], char t[])
{
int i, j;

for (i=j=0; t[i] != '\0'; ++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';
}

输入:I will(制表符)visit China(制表符)next week(换行符)
输出:I will\tvisit China\tnext week
制表符能正常输出,换行符不行

请问如何输出换行符呢?
...全文
361 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
i945800687 2011-12-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 nnrroo 的回复:]
C/C++ code
/*
不可显示转显示
*/

#include <stdio.h>

#define MAXLINE 100

void escape(char s[], char t[]);

int main()
{
char s[MAXLINE], t[MAXLINE];

printf("Input string: ");
……
[/Quote]

嗯,问题成功解决,我是说试了很久都打印不出来
原来要换个函数,不过我还没学fgets,上网查了查资料,有些复杂,准备以后再回过头来看
感谢了!
狂且 2011-12-11
  • 打赏
  • 举报
回复
楼主或者可以自己写个字符串输入函数保留任何形式的\n如: '\n', '\''\n'.

不以回车键为结束标志.而以 EOF 为结束标志.

这样就可以解决在输入字符串时只能按一次回车键的问题.
modicum_ck 2011-12-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 nnrroo 的回复:]
C/C++ code
/*
不可显示转显示
*/

#include <stdio.h>

#define MAXLINE 100

void escape(char s[], char t[]);

int main()
{
char s[MAXLINE], t[MAXLINE];

printf("Input string: ");
……
[/Quote]
++
狂且 2011-12-11
  • 打赏
  • 举报
回复
/*
不可显示转显示
*/

#include <stdio.h>

#define MAXLINE 100

void escape(char s[], char t[]);

int main()
{
char s[MAXLINE], t[MAXLINE];

printf("Input string: ");
/*
---------------------------------------------------------------------
* gets() 以 '\n' 为结束标记, 而且不保留 '\n', 而 fgets() 也是以其
* 位结束标志就可以保留.
* 但这样的话, 你输入的字符串中只能出现一个 '\n' 在最后. 除非你输
* 入 \n 如: abcd\nefgh\nhijk\n[Enter] 就会有四个 \n.
---------------------------------------------------------------------
*/
fgets(t, MAXLINE, stdin); // 修改
escape(s, t);

printf("s: %s\n", s);

return 0;
}

void escape(char s[], char t[])
{
int i, j;

for (i=j=0; t[i] != '\0'; ++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';
}

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧