2016-04-01 17 views
1

文字列をユーザーが入力します。次に、プログラムは単語の文字列を入力によってシフトします。問題は、zの上を移動しようとするたびに、句読点が現れることです。どのようにこの問題を克服する?あなたはZz句読点がある後ASCII code chartで見ることができるようにCで単語をシフトするときに句読点の文字をスキップ

printf("Enter text : "); 
scanf("%s",&plaint); 

printf("Enter shift amount : "); 
scanf("%d",&shif); 

for(int j=0; plaint[j] != '\0'; j++) 
{ 
    plaint[j]=plaint[j]+shif; 
} 
+0

「z」を1つシフトしようとすると、どうなると思いますか? – eyalm

+0

それは "a"と表示されます – whoami

答えて

1

。 zからジャンプしてモジュロ演算を使用するには(%)。たとえば:その後、追加し、私は数値範囲0-25にあるように文字を移動し、数字は0-9であることを

char plaint[101]; 
int shif; 

printf("Enter text : "); 
scanf("%100s",plaint); 

printf("Enter shift amount : "); 
scanf("%d",&shif); 

for(int j=0; plaint[j] != '\0'; j++) { 
    if(plaint[j] >= 'A' && plaint[j] <= 'Z') 
     plaint[j] = (plaint[j] -'A' + shif) % 26 + 'A'; 

    if(plaint[j] >= 'a' && plaint[j] <= 'z') 
     plaint[j] = (plaint[j] -'a' + shif) % 26 + 'a'; 

    if(plaint[j] >= '0' && plaint[j] <= '9') 
     plaint[j] = (plaint[j] -'0' + shif) % 10 + '0'; 
} 

これは文字と数字のみをシフトする、およびZとまず周りを包みますシフトしてモジュロを使用して、'a'(97)、'A'(65)、または'0'(48)を追加して、ASCIIチャートの元の場所に戻します。

パンチングやその他の文字は変更されません。

+0

本当に助けてくれてありがとう – whoami

+1

これは非常に滑らかで、 'scanf("%100s "、&plaint)のちょうど微調整です;'( '' '、' 'plaint'はポインタです。 ..) –

関連する問題