前提・実現したいこと
大学の課題で作ったプログラムで、提出する際にエラーメッセージが出るのですが原因が分かりません。どこをどのように直すべきか教えてください。
問題
There is a trick to encrypt the data and use a word as its key. Here's how it works: First, choose a word as the key, such as TRAILBLAZERS. If the word contains repeated letters, only the first one is kept, and the rest are discarded. Now, the modified word is listed below the alphabet, as shown below: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z T R A I L B Z E S Then arrange the letters in the alphabet that do not appear in the modified word after the modified word to get the coding table: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z T R A I L B Z E S C D F G H J K M N O P Q U V W X Y Therefore, based on the key of TRAILBLAZERS, if our original message is ATTACK, it will be encrypted as TPPTAD. Input requirements: input key and original information, output encrypted information Example 1: Input TRAILBLAZERS ATTACK and output TPPTAD. Input : Enter a line, including the input key and the original information (both capital letters), separated by spaces. Output : Output a line, representing the encrypted information
エラーメッセージ
1. The data is opened too small, resulting in access to a memory area that should not be accessed 2. A division by zero error occurs 3. A large array is defined in the function, causing the program stack area to be exhausted 4. The pointer is used incorrectly, resulting in access to a memory area that should not be accessed 5. It is also possible that the program throws an unreceived exception
該当のソースコード
C++
1#include<iostream> 2using namespace std; 3int main() 4{ 5 char list1[26] = {0}, list2[26] = {0};//暗号化する文字列, 新たなアルファベット表 6 int size = 0; char gomi;//入力した文字の文字数 7 bool check = false;// 前に同じ文字が出たかどうか 8 for(int i = 0; ; ++i){ 9 gomi = getchar(); 10 for(int j = 0; j <= i; ++j){ 11 if(gomi == list2[j]) check = true; 12 } 13 if(gomi == ' ') break;//空欄で終了 14 else if(check == true) {i -= 1; check = false; continue;}//前に同じ文字があれば飛ばす 15 else list2[i] = gomi; 16 size += 1; 17 } 18 for(int i = 0; ; ++i){//暗号化する文字列の格納 19 gomi = getchar(); 20 if(gomi == '\n') break;//改行で終了 21 else list1[i] = gomi; 22 } 23 int num = 65;//ASCⅡコード 24 for(int i = size; i < 26; ++i){ 25 for(int j = 0; j < size; j++){ 26 if(num == list2[j]){num += 1; j = -1;}//前に同じコードがあれば確認を最初からやり直し 27 } 28 list2[i] = num; 29 num += 1; 30 } 31 for(int i = 0; i < 26; ++i){ 32 if(list1[i] == 0) break;//暗号化する文字列の出力が終わったら終了 33 cout << list2[list1[i] - 65]; 34 } 35 cout << endl; 36}
https://teratail.com/help/avoid-asking
「何かを作りたいのでコードを書いてほしい、学校の課題を解いてほしい等の質問は、具体的にプログラミングで困っている質問ではないと考え、推奨していません。」
学校の課題であれば、それまでの講義や教材の中で解決策は示されているはずです。
そうでない場合は講義や教材の質の問題が悪い可能性もあるため、教員に質問・相談しましょう。
マルチポスト https://stackoverflow.com/questions/61348928/i-cant-understand-the-error-messages-encripting-data
なお、学校の課題であれ、問題文には著作権があります。引用の要件を満たすために、大学名、講義名、出題者名(教員の名前)を明記してください。
返信ありがとうございます、著作権のことは初めて知りました。ご指摘ありがとうございます、次からは気をつけます。Tsinghua university, C++Programme Design and Training, Hong Zhao です。助教にも質問しましたが、自信の中国語が拙いこともありあまり理解出来なかったため、こちらでも質問させていただきました。
How about your English? He will explain what he thinks to you in English if you will, as the whole of the question is written in English, not in 汉语. Maybe asking for "a written answer", such as an e-mail, helps you understand his Chinese, since we can read and share what he thinks. (您能阅懂得汉语吧?)
Sorry for being late to reply, I've seen your reply already but I was busy for my classes that I haven't tried your advices yet.....Let me try that in minutes. The original question was written in Chinese, but I translated to English. (我看的懂中文,如果对您来说更方便的话我们就用中文来沟通吧。)
回答2件
あなたの回答
tips
プレビュー