[1.1] 自分が今行いたい事は何か
「猫でも分かるC言語プログラミング」という本の第8章練習問題にて、「関数を利用し、文字列の文字を反対に並べ替えるプログラムを作って下さい。」との問題が有り、プログラムを書いてみました。
[1.2] どのように取り組んだか(プログラムコードがある場合記載)
#include<stdio.h>
#include<stdlib.h>
int reverse(char *str,int leng,char *rstr);
int main(void){
char str[120],rstr[120];
size_t leng;
printf("文字を入力して下さい\n");
gets(str);
leng = strlen(str);
reverse(&str[0],leng,&rstr[0]);
printf("入力した文字は%sです。\n"
"反対にすると%sです。\n"
"文字の長さは%dです。",str,rstr,leng);
return 0;
}
int reverse(char *str,int leng,char *rstr){
int i;
for(i=0;i<leng;i++){
*(rstr+i) = *(str+leng-1-i);
}
*(rstr+leng) = '\0';
return 0;
}
[1.3] どのようなエラーやトラブルで困っているか(エラーメッセージが解る場合は記載)
1・「あ」などの全角文字を入力すると、表示がおかしくなります。
【例1】(コマンドプロンプトの出力結果です。)
文字を入力して下さい
あ
入力した文字はあです。
反対にするとbナす。文字の長さは2です。
1文字目の数字はFFFFFF82 2文字めの数字はFFFFFFA0
【例2】
文字を入力して下さい
あasd
入力した文字はあasdです。
反対にするとdsabナす。文字の長さは5です。
1文字目の数字はFFFFFF82 2文字めの数字はFFFFFFA0
2・ゆくゆくは、全角文字と半角文字を混ぜた文字列も逆に出来るように考えています。しかし、その方法がうまく思いつかず困っています。
[1.4] 今何がわからないのか、知りたいのか
1・
1文字目の数字はFFFFFF82 2文字めの数字はFFFFFFA0
の部分におけるFという文字が何故連続しているのか。
2・全角文字と半角文字を混ぜた文字列も逆に出来るようにする方法。
[2] 環境
[2.1] OS : Windows7
[2.2] コンパイラ名 : Visual Studioコマンドプロンプト
[3] その他
・どの程度C言語を理解しているか
学校でC言語について学んではいたものの、イマイチ身に付けることが出来なかったため、独学で勉強をしようと思いました。
入門書を3冊ほど読み、関数、ポインタ、構造体あたりをウロウロとしています。