UVa 10082 - WERTYU

Posted ---

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVa 10082 - WERTYU相关的知识,希望对你有一定的参考价值。

1.题目大意:

 

输入一个错位的字符串(字母全为大写),输出原本想打出的句子

 

2.思路:

如果将每个输入字符所对应的应输出字符一一使用if或者switch,则过于繁琐。因此考虑使用常量数组实现。

 

3.应该注意的问题:

(1) 在对常量数组赋值时,应考虑字符转义符的影响,反斜杠"\\"的转义符应为"\\\\"。

(2) 小心控制访问数组的范围。

 

4.代码:

#include"stdio.h"
char s[] = "`1234567890-=QWERTYUIOP[]\\\\ASDFGHJKL;\'ZXCVBNM,./";
int main()
{
    int i,a;
    while((a=getchar()) != EOF)
    {
        for(i = 1; s[i] && (s[i]!=a); i++); // 寻找其错位之后的位置。如果i大于或等于数组s[]的长度,则s[i]=0。
        if(s[i])
            putchar(s[i-1]); // 如找到错位之后的位置,输出其原本想打出的字符
        else
            putchar(a);
    }
    return 0;
}

  

其中,第八行,也可以用以下方式取代(需要加相应头文件)

 for(i = 1; i<strlen(s) && (s[i]!=a); i++);

5.小结:

(1)慎用"scanf("%s")"输入字符串,因为其遇到空格或者Tab会停下

(2)在"scanf("%s",s)"中,不要在s前加"&"

(3)定义常量数组无需指明大小,编译器会自动计算。

 

参考书目:算法竞赛入门经典(第2版) 刘汝佳 编著

以上是关于UVa 10082 - WERTYU的主要内容,如果未能解决你的问题,请参考以下文章

WERTYU(WERTYU, UVa10082)

Uva10082 WERTYU -S.B.S.

UVA10082 WERTYU

[UVa] WERTYU(10080)

Uva10082

Acm WERTYU的题解