2015-06-14 28 views
-1

這裏是我的程序,它要求用戶輸入一行文本,然後顯示它所關聯的ASCII碼,並在此之後通過向我添加1來修改ASCII碼,它還打印出與新的ASCII碼相關的新字符。如何用素數修改ASCII碼C程序

#include <stdio.h> 
#include <stdlib.h> 
#include <ctype.h> 
#include <string.h> 

int main() 
{ 
    char s[ 70 ]; // define character array of size 70 
    size_t i; // loop counter 

    // use gets to get text from user 
    puts("Enter a line of text: \a\n"); 
    fgets(s, 70, stdin); 

    // convert each character to ASCII and output 
    puts("\n ASCII code for the characters \n"); 
    for (i = 0; s[ i ] != '\0'; ++i) 
    { 
     printf(" %c:%d",(s[ i ]),(s[ i ])); 
    } // end for Uppercase ASCII 

    // convert each character to modified ASCII and output 
    puts("\nThe line modified with progressively higher ASCII:\n"); 
    for (i = 0; s[ i ] != '\0'; ++i) 
    { 
     printf("%c", (s[ i ] + (i+1))); 
    } // end for modified characters 

    puts(""); 
    printf(" \n modified ASCII code for the entered string \n\n\a"); 
    for (i = 0; s[ i ] != '\0'; ++i) 
    { 
     printf(" %c:%d",(s[ i ] + (i+1)),(s[ i ] +(i+1))); 
    } // end for modified ASCII code 
    printf("\n \t The final value of loop variable 'i' is:%d\n", i); 
    puts(""); 
    system("PAUSE"); 
} 

我有難度修改它,這樣的ASCII碼字符和由前七個質數2,3,5 ...... 17,比那些後第7張素數在反向起來去改變17,13,11,7,... 2。因此,在第一個循環之後,g表示g有ASCII碼103,修改後的ASCII碼現在爲105,新的字母現在爲i。有人可以幫我嗎?

+0

對不起,我只是編輯它,它是我的一部分 – Jimmy

+0

提示一個錯誤:你怎麼知道'S [I] +(I + 1)'是可打印的ASCII? –

+0

%d打印ASCII中的字母,只需輸入字符串並將其從字符%c轉換爲ASCII%d。 – Jimmy

回答

1

開始通過聲明陣列中存儲的圖案(素數,按升序排列,然後按降序排列,以這樣的方式,降低模陣列大小將導致週期)。例如:

unsigned int prime[] = { 2, 3, 5, 7, 11, 13, 17, 13, 11, 7, 5, 3 }; 

現在,而不是增加(i + 1)在你的循環的每個字符,你需要添加prime[i % (sizeof prime/sizeof *prime)]。例如:

for (i = 0; s[i] != '\0'; i++) 
{ 
    putchar(s[i] + prime[i % (sizeof prime/sizeof *prime)]); 
} 

P.S.從技術上講,它不需要是ASCII。用這種方式思考:C和ASCII一起像咖啡和奶牛一樣。大多數人喜歡它,但偶爾會有人用椰奶或奶油代替。

+0

很多反饋意見,這個答案很有意義。 – Jimmy

+0

最後一個問題,如果我想要做一個字符串,說68個字符長,我將不得不繼續做模式或有更有效的方式嗎? – Jimmy

+0

當你知道模('%')操作符的作用時,你就會理解這個問題的答案......正如你所看到的,這個答案使用它。 – Sebivor