問題
文字列sの文字の並びを反転する関数を作成せよ。
void rev_string(char s[]){/・・・/}
たとえば、sに"SEC"を受け取ったら、その配列を"CES"に更新すること。
下記は私が考えた、この問題に対するプログラムです。
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> void rev_string(char s[]) { int i = 0; int len = 0; while (s[i]) { len++; } for (i = 0; i < len; i++) { s[i] = s[len -1 - i]; } printf("%s", s); return 0; } int main(void) { char str[128]; printf("文字列を入力してください:\n"); scanf("%s", str); rev_string(str); return 0; }
このプログラムを実行すると入力しただけでプログラムが止まってしまいます。
なぜ、そのようになるのか理由が知りたいです。
よろしくお願いします。
下記は解決後のコードです。
改訂1
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> void rev_string(char s[]) { char temp[128]; int i = 0; int len = 0; len = strlen(s); for (i = 0; i <(len / 2); i++) { temp[i] = s[i]; s[i] = s[len - 1 - i]; } if ((len % 2) == 0) { for (i = (len / 2); i < len; i++) { s[i] = temp[len - 1 - i]; } } else { for (i = (len / 2) + 1; i < len; i++) { s[i] = temp[len - 1 - i]; } } } int main(void) { char str[128]; printf("文字列を入力してください:\n"); scanf("%s", str); rev_string(str); printf("%s", str); return 0; }
改訂2(改訂1をシンプルにしました)
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> void rev_string(char s[]) { int i = 0; int len = 0; char temp; len = strlen(s); for (i = 0; i <(len / 2); i++) { temp = s[i]; s[i] = s[len - 1 - i]; s[len - 1 - i] = temp; } } int main(void) { char str[128]; printf("文字列を入力してください:\n"); scanf("%s", str); rev_string(str); printf("%s", str); return 0; }
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/27 00:43 編集
2020/02/27 04:17