天天看點

練習 3-2 編寫一個函數escape(s, t),将字元串t複制到字元串s中,并在複制過程中将換行符、制表符等不可見字元分别轉換為\n、\t等相應的可見的轉義字元序列。要求使用switch語句。

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);
}
           

如果程式設計有錯誤或更簡潔的方法,歡迎并感謝您指正出示,謝謝!

繼續閱讀