C 将控制序列转换为正确的字符
我将用C编写一个程序,将字符串t重写为s变量,并将字符(如新行、制表)转换为控制序列(如\n、\t)。接下来,我需要编写一个函数来执行反向操作——将控制序列转换为正确的字符 这是我的密码:C 将控制序列转换为正确的字符,c,string,char,C,String,Char,我将用C编写一个程序,将字符串t重写为s变量,并将字符(如新行、制表)转换为控制序列(如\n、\t)。接下来,我需要编写一个函数来执行反向操作——将控制序列转换为正确的字符 这是我的密码: #include <stdio.h> #define LIMIT 50 void escape(char * s, const char * t); void bumpInto(char * s, const char * t); int main(void) { const char
#include <stdio.h>
#define LIMIT 50
void escape(char * s, const char * t);
void bumpInto(char * s, const char * t);
int main(void) {
const char s1[LIMIT] = "Ala\nma\tkota.";
char s2[LIMIT];
char s3[LIMIT];
printf("%s\n", s1);
escape(s2, s1);
printf("%s\n", s2);
bumpInto(s3, s2);
printf("%s\n", s3);
return 0;
}
void escape(char * s, const char * t) {
while (*t) {
switch (*t) {
case '\n':
*s = '\\';
++s;
*s = 'n';
break;
case '\t':
*s = '\\';
++s;
*s = 't';
break;
default:
*s = *t;
break;
}
++s;
++t;
}
}
void bumpInto(char * s, const char * t) {
char prev = 0;
while (*t) {
if (prev == '\\') {
switch (*t) {
case 'n':
--s;
*s = '\n';
break;
case 't':
--s;
*s = '\t';
break;
}
}
// if (prev != '\\' && *t != '\\')
*s = *t;
putchar(*s);
prev = *t;
++s;
++t;
}
}
而不是预期的:
Ala
ma kota.
我在编写bumpInto函数时遇到了问题,该函数执行与转义相反的操作,特别是将控制序列转换为正确的字符。有人能提出建议吗?您正在重写控制字符:
*s = *t;
每次都被执行。只需添加一个else:
void bumpInto(char * s, const char * t) {
char prev = 0;
while (*t) {
if (prev == '\\') {
switch (*t) {
case 'n':
--s;
*s = '\n';
break;
case 't':
--s;
*s = '\t';
break;
}
}else
*s = *t;
putchar(*s);
prev = *t;
++s;
++t;
}
*s = *t; // add null terminator '/0'
}
顺便说一句,您没有处理字符串的空终止符。您只需要做一件事:分支或相反。您现在所做的操作将覆盖开关的结果。此外,还有一种比保持
prev
@Arkadiy更优雅的方法,我应该具体做什么?当你看到一个“`”,你应该做一件事。当你看到另一个角色时,你应该做另一件事。萨皮恩蒂。
void bumpInto(char * s, const char * t) {
char prev = 0;
while (*t) {
if (prev == '\\') {
switch (*t) {
case 'n':
--s;
*s = '\n';
break;
case 't':
--s;
*s = '\t';
break;
}
}else
*s = *t;
putchar(*s);
prev = *t;
++s;
++t;
}
*s = *t; // add null terminator '/0'
}