2014年8月22日星期五

[UVa] 10082 - WERTYU

參考並引用了下列連結的說明:http://www.cnblogs.com/oomusou/archive/2007/03/04/663234.html

char s[] = "Hello World";

上述的s是個char array,含12個byte(包含結尾\0),"Hello World"對s來說是initializer,將字元一個一個地copy進s陣列。
char *s = "Hello World";
上述的s是一個pointer指向char,由於"Hello World"本身就是一個string literal,所以s指向"Hello World"這個string literal的起始記憶體位置。

char s[]為陣列,雖然s = &s[0],但s是『常數』,恆等於&s[0]無法改變,但char *s為pointer,指向s[0],但卻是變數,可以任意改變,故可用*s++任意更改pointer值。


#include <stdio.h>
#include <string.h>
char *s = "`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./";
int main(){
  int i,c;
  while((c = getchar())!=EOF){
    for(i=1;s[i] && s[i]!=c;i++); /*輸入字串逐字檢查*/
    if(s[i])putchar(s[i-1]); /*輸出前一個字元*/
    else putchar(c); /*如果非其中字元,輸出原本字元(空白)*/
  }
  return 0;
}

沒有留言: