C語言程式設計(第二版) 練習3-2 個人設計
練習 3-2 編寫一個函數escape(s, t),将字元串t 複制到字元串s 中,并在複制過程中将換行符、制表符等不可見字元分别轉換為\n、\t等相應的可見的轉義字元序列。要求使用switch語句。
代碼塊
方法1:
#include <stdio.h>
#include <stdlib.h>
void escape(char s[], char t[]);
int main()
{
char a[]="How are you";
char b[20];
escape(b, a);
printf("%s", b);
printf("\n");
system("pause");
return 0;
}
void escape(char s[], char t[])
{
int i, k;
i=k=0;
while((s[k]=t[i])!='\0'){
switch(t[i]){
case '\t':
s[k]='\\';
s[++k]='t';
break;
case '\n':
s[k]='\\';
s[++k]='n';
break;
default:
s[k]=t[i];
break;
}
++i;
++k;
}
}
方法2:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void input(char s[]);
void escape(char s[], char t[]);
int main()
{
char str1[100], str2[100];
input(str2);
escape(str1, str2);
system("pause");
return 0;
}void input(char s[])
{
printf("Please enter string: ");
gets(s);
}
void escape(char s[], char t[])
{
int i, j;
for (i=0, j=0; t[j]!='\0'; i++, j++){
switch(t[j]){
case '\n': s[i++]='\\'; s[i]='n'; break;
case '\t': s[i++]='\\'; s[i]='t'; break;
case '\b': s[i++]='\\'; s[i]='b'; break;
case '\\': s[i++]='\\'; s[i]='\\'; break;
case '\r': s[i++]='\\'; s[i]='r'; break;
case '\'': s[i++]='\\'; s[i]='\''; break;
case '\"': s[i++]='\\'; s[i]='\"'; break;
default: s[i]=t[j]; break;
}
}
s[i]='\0';
printf("Copy now: ");
puts(s);
}
同時編寫一個相反功能的函數,這裡隻更改函數代碼。
方法1:
void escape(char s[], char t[])
{
int i, k;
i=k=0;
while((s[k]=t[i])!='\0'){
switch(t[i]){
case '\\t':
s[k]='\t';
break;
case '\\n':
s[k]='\n';
break;
default:
s[k]=t[i];
break;
}
++i;
++k;
}
}
方法2:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void input(char s[]);
void re_escape(char s[], char t[]);
int main()
{
char str1[100], str2[100];
input(str2);
re_escape(str1, str2);
system("pause");
return 0;
}void input(char s[])
{
printf("Please enter string: ");
gets(s);
}
void re_escape(char s[], char t[])
{
int i, j;
for (i=0, j=0; t[j]!='\0'; i++, j++){
if (t[j]=='\\')
switch(t[j+1]){
case 'n': s[i]='\n'; break;
case 't': s[i]='\t'; break;
case 'b': s[i]='\b'; break;
case '\\': s[i]='\\'; break;
case 'r': s[i]='\r'; break;
case '\'': s[i]='\''; break;
case '"': s[i]='\"'; break;
default: s[i]=t[j]; break;
}
else
s[i]=t[j];
}
s[i]='\0';
printf("Copy now: ");
puts(s);
}
如果程式設計有錯誤或更簡潔的方法,歡迎并感謝您指正出示,謝謝!