2017-05-12 29 views
0

我試圖讓程序環32之間的ASCII值126,然後由用戶和打印給出添加字符串的每個字符的值它在屏幕上。例如: - 如果用戶輸入字符串「‘XYZ’,則輸出是‘130 131 132’,而不是這個輸出應該像'35 36 37」。這裏低於循環ASCII值之間32到126和添加值,將其

#include<stdio.h> 
#include<conio.h> 
#include<string.h> 
int main() 
    { 
     char str[100]; 
     int i=0; 
     printf("Enter a string: "); 
     fgets(str,100,stdin); 
    str[strcspn(str,"\n")]='\0'; 
     printf("String is: %s\n",str); 
    printf("\nASCII value in Decimal is: "); 
     while(str[i]!='\0') 
     { 
      printf("%d ",str[i]); 
     i++; 
     } 
      printf("\n\nAfter adding '10',ASCII value changes to: "); 
     for(i = 0; i < str[i]; i++) 
     { 
     printf("%d ",str[i] += 10); 
     } 
    getch(); 
} 

我我的代碼不知道數組和遞歸的原因,因爲他們並不在我的大學課程中,所以我不知道這些東西是否可以用他們中的任何一個來完成。

+0

*您... –

+1

你想在32範圍內旋轉字符到ROT47中的126?然後你必須把字符帶到一個基於零的範圍,並使用模算法:'c = 32 +(c-32 + shift)%(127 - 32)'。 (儘管ROT47保持空間不變,並開始從ASCII 33開始移位。) –

+1

你的循環結束控制在for(for i = 0; i

回答

1

當您在凱撒班或「ROT47」中旋轉字符時,您必須考慮在範圍之外移動。你可以做到這一點的溢出後減去範圍的寬度:

s[i] = s[i] + shift; 
if (s[i] >= 127) s[i] -= (127 - 33); 

或有效範圍:

s[i] = 33 + (s[i] - 33 + shift) % (126 - 33); 

注意內就從零開始的索引模運算,這些方法只會當轉變是積極的時候工作。您可以通過使換檔的範圍寬度減去換檔來彌補負移。您還應該確保不要觸摸有效範圍之外的字符。

這裏有一個小程序,實現功能旋轉ASCII範圍和打印的ASCII值:使用數組*

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

#define LO 33  // inclusive lower bound of ASCII shift region 
#define HI 127  // exclusive upper bound of ASCII shift region 

void asciirot(char *s, int shift) 
{ 
    while (shift < 0) shift += (HI - LO); 

    for (int i = 0; s[i]; i++) { 
     if (LO <= s[i] && s[i] < HI) { 
      s[i] = LO + (s[i] - LO + shift) % (HI - LO); 
     } 
    } 
} 

void putascii(const char *s) 
{ 
    printf("{"); 

    for (int i = 0; s[i]; i++) { 
     if (i) printf(", "); 
     printf("%d", s[i]); 
    } 

    puts("}");   
} 

int main() 
{ 
    char str[] = "The quick brown fox jumps over 1,206 lazy dogs!"; 

    puts(str); 

    asciirot(str, 10); 
    puts(str); 
    putascii(str); 

    asciirot(str, -10); 
    puts(str); 
    putascii(str); 

    return 0; 
} 
+0

謝謝你很多先生... –