如何編碼?(簡單字符串的模擬)

如何編碼?

Time Limit: 1000ms
Memory Limit: 65535KB
64-bit integer IO format: %lld      Java class name: Main
Clm高中同桌特別喜歡數學,他的QQ登陸密碼是用他的名字經過數學方法加密後得到的字符串,雖然記起來沒什麼規律,但他對於這種方法樂此不疲。他告訴clm他加密後的字符串,一臉壞笑的問“你知道我是怎樣加密的嗎?”clm想了一下並沒有直接回答,而是用他的加密方法給另一個同學的名字進行了加密,得到了一個新的密碼,從而回答了他的問題。
名字:Qin Weize
密碼:Qkr Cmsls
名字:Zhao Xiao nan
密碼:Zjeu Fsmc dsh
從以上兩個例子中學習clm的加密方法對名字進行加密。

Input

第一行輸入一個整數n,接下來n行每行是一個名字,只包含大小英文字母和空格,長度不超過80個字符。

Output

對於每個名字,輸出一個經過加密的字符串,名字中大寫的字母密碼中依然大寫。

Sample Input

3
Ouyang Wuyou
Hao Rongquan
Li Jinyu

Sample Output

Owcgvq Iiogo
Hcs Xwxseksh
Lk Novig


題目大意:

給你一串字符串,然後,讓你找出其中的加密方法,對於任意輸入的一串字符,輸出這個加密後的字符串。。。

解題思路:

其實,只要寫出a-z或A-Z的對應關係,就不難看出來,這個字符的對應關係是很簡單的,我們只要對於第一個字符在其基礎上加2*(i-space)的個數就可以,

因爲space的話,不會被參加計算的,但是i的值會增加1,所以使用這個方法,就能夠很避免另外在開設一個變量了。

下來就是關於一個字符轉化成爲另外一個字符的方法了,那就是先找到一個基準,如果以前是大寫字母,就找A。如果以前是小寫字母, 就找到a。

ch = (ch-'A'+(i-space))%26+'A';

就可以將ch通過某種加密變成另外一個字符了,小寫只要把基準改爲‘a’,就可以了。

getline(cin,str);就是相當於c語言中的gets(s);因爲str中含有空格,所以就會出現這樣遇見空格就停止輸入的情況。。。


代碼:

# include<cstdio>
# include<iostream>
# include<algorithm>
# include<cstring>
# include<string>
# include<cmath>
# include<queue>
# include<stack>
# include<set>
# include<map>

using namespace std;

# define inf 999999999

string str;

int main(void)
{
    int t;cin>>t;
    getchar();
    while ( t-- )
    {
        getline(cin,str);
        int space = 0;
        for ( int i = 0;i < str.length();i++ )
        {
            char ch = str[i];
            char d;
            if ( ch <='Z'&&ch >= 'A' )
                d = 'A';
            else
                d = 'a';

            if ( isalpha(ch) )
            {
                ch = ((ch-d)+(i-space)*2)%26+d;
            }
            if ( ch==' ' )space++;
            printf("%c",ch);
        }
        printf("\n");
    }


	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章