課題で条件としてchangeS_letterの型はvoidにすることと、stdio.hのみをインクルードすることが指定されています。
ネットでctypeを使わないで変換する方法を見つけ、それを参考にしてやってみたのですが、変換がされずにそのまま出力されてしまいます。あと、フフフという文字も出てきてしまいます。
C
1#include<stdio.h> 2 3void changeS_letter(char *tmp, const char *str) 4{ 5 while (*tmp == *str) { 6 if ('a' <= *str && *str <= 'z') { 7 *tmp = *str - ('a' - 'A'); 8 str++; 9 tmp++; 10 } 11 12 else { 13 *tmp = *str + ('a' - 'A'); 14 str++; 15 tmp++; 16 } 17 } 18} 19 20int main(void) 21{ 22 char str[30]; 23 char tmp[30]; 24 25 printf("Please input a string\n"); 26 scanf("%s", str); 27 28 printf("result\n"); 29 30 changeS_letter(tmp, str); 31 32 printf("%s\n", tmp); 33} 34
こちらが参考にしていただいたものです---------------------------
C
1#include <stdio.h> 2 3void upperstring(char*, const char*); 4void lowerstring(char*, const char*); 5char upper(char); 6char lower(char); 7 8void upperstring(char *out, const char *in){ 9 int i; 10 11 i = 0; 12 while(in[i] != '\0'){ 13 out[i] = upper(in[i]); 14 i++; 15 } 16} 17 18void lowerstring(char *out, const char *in){ 19 int i; 20 21 i = 0; 22 while(in[i] != '\0'){ 23 out[i] = lower(in[i]); 24 i++; 25 } 26} 27 28char upper(char c){ 29 if('a' <= c && c <= 'z'){ 30 c = c - ('a' - 'A'); 31 } 32 return c; 33} 34 35char lower(char c){ 36 if('A' <= c && c <= 'Z'){ 37 c = c + ('a' - 'A'); 38 } 39 return c; 40} 41 42int main(void){ 43 char s[20]; 44 45 upperstring(s, "I am a CAT"); 46 printf("%s\n", s); 47 48 lowerstring(s, "I am a CAT"); 49 printf("%s\n", s); 50 51 return 0; 52}
課題などの問題は推奨されてません。
https://teratail.com/help/avoid-asking
回答5件
あなたの回答
tips
プレビュー