2012-04-29 14 views
1

我想不出一個更好的方式來描述它,所以它就是這樣。密碼一條消息,然後解碼它在Objective-C

我正在編寫一個程序,很簡單,你輸入一個你想要編碼的信息,它將它編入一個編碼的信息,比如'簡單',例如,把它翻譯成' gcua'(通過將每個字母向前移動兩個字母來實現)

然後,接收端的人可以將其粘貼到程序中,並將其返回到原始文本。我明顯想到的是將信件往上移兩個或更多的東西要稍微複雜一點,但是我離題了。

我有一些真的..這是真正的基本代碼。我遇到的問題是將信息的每個字母都打破以應用編碼,然後將其重新組合。

我不是要求程序,我更要求如何達到編碼信息的程度。 (例如,將字符串轉換爲可能的編碼格式)。它並不打算做任何細節,只是非常簡單,直截了當。

這裏有一個基本的輪廓(感謝那些誰幫助排除故障):

int main (int argc, const char * argv[]) { 
    @autoreleasepool { 

     char choice, yes = 'y', no = 'n', buf[1024]; 

     NSString *plainText, *encrypted, *decoded; 

     NSLog(@"Encode (Y) or Decode (N)"); 
     scanf("%c", &choice); 
     choice = tolower(choice); 

     if (choice == yes) { 

      scanf("%1024s", buf); 
      plainText = [NSString stringWithCString:buf encoding:NSUTF8StringEncoding]; 

     } else if (choice == no) { 

     } 

    } 
    return 0; 
} 

回答

0

%c意味着char*的說法,但你是路過char**

你應該讓你的變量char,不是char*

char choice, yes = 'y', no = 'n'; 

這也將是有意義的choice轉換比較yn之前降低的情況下,因爲你問的最終用戶進入大寫YN

scanf("%c", &choice); 
choice = tolower(choice); 

編輯迴應編輯問題:您不能使用%s將值讀入NSString。你應該在scanf使用char buf[MAX],並限制長度:

char buf[1024]; 
scanf("%1024s", buf); 
plainText = [NSString stringWithCString:buf encoding:NSUTF8StringEncoding]; 
+0

只是固定的幾分鐘前進行故障診斷時,並沒有在後更改代碼雖然。我會糾正它。 PS:感謝提到toLower(),沒有發現 – JTApps 2012-04-29 03:19:59

+0

故障排除是一個很大的幫助。我的工作從未使我廣泛地使用過字符串或編碼,而且這是一個肯定可以改進的領域。現在,代碼被平息了,或許我們可以研究這個問題?我們在講話時正在努力。 – JTApps 2012-04-29 03:44:09

0

%s規範scanf告訴它讀取到您已經分配的char陣列。但是,您要傳遞一個零指針來代替NSString

嘗試這樣:

NSData *data = [[NSFileHandle fileHandleWithStandardInput] readDataToEndOfFile]; 
plainText = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];