458 - The Decoder & C语言gets函数,字符输出输出 & toascii()

Write a complete program that will correctly decode a set of characters into a valid message. Your program should read a given file of a simple coded set of characters and print the exact message that the characters contain. The code key for this simple coding is a one for one character substitution based upon a single arithmetic manipulation of the printable portion of the ASCII character set.

Input and Output

For example: with the input file that contains:

1JKJ‘pz‘{ol‘{yhklthyr‘vm‘{ol‘Jvu{yvs‘Kh{h‘Jvywvyh{pvu5
1PIT‘pz‘h‘{yhklthyr‘vm‘{ol‘Pu{lyuh{pvuhs‘I|zpulzz‘Thjopul‘Jvywvyh{pvu5
1KLJ‘pz‘{ol‘{yhklthyr‘vm‘{ol‘Kpnp{hs‘Lx|pwtlu{‘Jvywvyh{pvu5

your program should print the message:

*CDC is the trademark of the Control Data Corporation.
*IBM is a trademark of the International Business Machine Corporation.
*DEC is the trademark of the Digital Equipment Corporation.

Your program should accept all sets of characters that use the same encoding scheme and should print the actual message of each set of characters.

Sample Input

1JKJ‘pz‘{ol‘{yhklthyr‘vm‘{ol‘Jvu{yvs‘Kh{h‘Jvywvyh{pvu5
1PIT‘pz‘h‘{yhklthyr‘vm‘{ol‘Pu{lyuh{pvuhs‘I|zpulzz‘Thjopul‘Jvywvyh{pvu5
1KLJ‘pz‘{ol‘{yhklthyr‘vm‘{ol‘Kpnp{hs‘Lx|pwtlu{‘Jvywvyh{pvu5

Sample Output

*CDC is the trademark of the Control Data Corporation.
*IBM is a trademark of the International Business Machine Corporation.
*DEC is the trademark of the Digital Equipment Corporation.----------------------------------------------------------------------------------------------------------------------------题目解答:
#include<stdio.h>
int main(){
    char c;
    int j;
    while((c = getchar())!= EOF){
        if(c != ‘\n‘){
            putchar(c-7);
        }
        else
            putchar(c);
    }
    return 0;
}

getchar()与scanf的作用是相同的,但就是比较简练。同理putchar().

谈下fgets(),这个函数是用来获取一行的。

#define LOCAL
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#define MAXN 1000
char buf[MAXN];
int main(){
#ifdef LOCAL
    freopen("data.txt","r",stdin);
    freopen("out.txt","w",stdout);
#endif
    int i,j;
    int tmp;
    while(fgets(buf,MAXN,stdin) != NULL){
        tmp = strlen(buf);
        for(i = 0; i < tmp;i++){
            j = toascii(buf[i])-7;
            printf("%c",j);
        }
        printf("\n");
    }
    return 0;

}

fgets(char* buf,int number,FILE *fin)从输入流里读入(number - 1)个字符转存到buf指向的地址中,遇到换行符‘\n‘或者文件结束符‘\0‘就会停止.

注意fgets的有效字符为(number - 1 )个,最后会加上文件结束符‘\0‘。fgets能读取有效的一行,因为它遇到回车符‘\n‘就会停止,而这个‘\n‘也会是buf中最后一个有效字符(再往后就是文件结束符‘\0‘).只有一种情况下,buf不会以‘\n‘为最后一个有效字符,那就是在遇到换行符之前遇到文件结束符‘\0‘,即输入文件本身不是以回车结束的。(引用于http://blog.sina.com.cn/s/blog_608e238e0100kvvi.html)。

使用fgets与题目不符,题目中输入没有说以换行符决定一行,所以还是用getchar比较合适。

2.  同时在提交时使用toascii来得到数字时,提示为WA。

#include <ctype.h>

定义函数:int toascii(int c);

函数说明:toascii()会将参数c 转换成7 位的unsigned char 值,第八位则会被清除,此字符即会被转成ASCII码字符。

返回值:将转换成功的ASCII 码字符值返回。

范例:将int 型a 转换成ASSII 码字符。

 j = toascii(buf[i])-7;

使用这个的话,编译不能通过。若输入全是ascii码的话,由于ascii最大数字为127,第八位就是为0,不受影响。题目中说明输入为ascii码中的字符,因此,我认为这是平台的原因导致WA。

时间: 2024-10-13 23:07:15

458 - The Decoder & C语言gets函数,字符输出输出 & toascii()的相关文章

C语言strlen()函数用法

C语言strlen()函数:返回字符串的长度 头文件:#include <string.h> strlen()函数用来计算字符串的长度,其原型为:unsigned int strlen (char *s);  s为指定的字符串 eg: #include<stdio.h> #include<string.h> int main() { char *str1 = "http://see.xidian.edu.cn/cpp/u/shipin/"; char

C语言字符串函数大全

转载自http://www.360doc.com/content/08/0723/22/26860_1462024.shtml# 函数名: stpcpy 功能: 拷贝一个字符串到另一个 用法: char *stpcpy(char *destin, char *source); 程序例: #include<stdio.h> #include<string.h> int main(void) { char string[10]; char *str1 = "abcdefghi

C语言-getopt函数

#include<unistd.h> int getopt(int argc,char *const argv[],const char *optstring); extern char *optarg; extern int optind,opterr,optopt; optstring为一个字符列表,每个字符代表一个单字符选项 全局变量: optarg:存数据 optind opterr:控制是否向STDERR打印错误.若值为0,则关闭打印错误信息 optopt:存储出错的option(如

关于“C语言中的字符数组和字符串”一些需要注意的基础点

在C语言中,没有类似Java的String类对字符串的处理,字符串的包装可以采用字符数组. 先看字符数组: #include<stdio.h> void main() { char array[] = {'a','b','c'}; int str = sizeof(array)/sizeof(char); printf("%d",str); } 此时的输出结果为:3,即字符数组的长度为3. 下面我们用字符串初始化字符数组,代码如下. #include<stdio.h&

黑马程序员——c语言的函数

1. 什么是函数 ● 任何一个C语言程序都是由一个或者多个程序段(小程序)构成的,每个程序段都有自己的功能,我们一般称这些程序段为“函数”.所以,你可以说C语言程序是由函数构成的. 2. 函数的定义 1. 定义函数的目的 ● 将一个常用的功能封装起来,方便以后调用 2. 定义函数的步骤 ● 函数名:函数叫什么名字 ● 函数体:函数是干啥的,里面包含了什么代码 3. 格式 ● 固定格式(很多语言的函数都是这么写的) 返回值类型  函数名(形式参数列表) { ?函数体 } ● 举例 定义一个函数,计

C语言scanf函数详细解释(转)

函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息.可以读入任何固有类型的数据并自动把数值变换成适当的机内格式. 其调用格式为:      scanf("<格式化字符串>",<地址表>); scanf()函数返回成功赋值的数据项数,出错时则返回EOF. 其控制串由三类字符构成: 1.格式化说明

C语言 fread函数

C语言 fread函数 fread fread函数:读取文件函数(从文件流读取数据) 头文件:#include<stdio.h> 函数原型: size_t fread(void * ptr, size_t size, size_t nmenb, FILE* stream); 函数说明:从文件流中读取数据,stream为已打开的文件指针,ptr指向欲保存读取文件数据的空间,size为从文件中读取字符的大小,nmenb为欲读取字符数,读取成功后fread会返回一个值等同于nmenb的数值,相反会返

C语言之函数指针用法总结

一.函数返回指针值 函数是实现特定功能的程序代码的集合,函数代码在内存中也要占据一段存储空间 (代码区内),这段存储空间的起始地址称为函数入口地址.C语言规定函数入口地址为函数的指针,即函数名既代表函数,又是函数的指针(或地址). 1.函数的返回类型可以是指针类型,即函数返回指针值,其定义形式为: 2.函数返回指针值,需要考虑指针有效性的问题,例如:  这个返回有问题,因为它返回的是函数局部变量a的地址值.当函数调用结束后,函数局部变量会释放,变成未知对象.在return语句时,&a还是有效的,

C语言常用函数收集案例

//传入一个数组进行p和一个以什么进行分割的str,返回切片后的值 void split(char * p,char * str){ char chQuery[10]; int i = 0, j = 0; char tmp[32][32] = {0}; char *p1 = (char *)malloc(1024); while((p1 = (char *)strchr(p, *str)) != NULL) //必须使用(char *)进行强制类型转换 { strncpy(tmp[i], p,