質問編集履歴

5

質問テーマを具体的なものにした

2020/12/15 14:18

投稿

skateboard
skateboard

スコア0

test CHANGED
@@ -1 +1 @@
1
- ソースコードの書き方組み方が分かりません。至急教えください。
1
+ 文字列(数字アルファベット(文字、小文字)、その他)を入力し種類別に抽出
test CHANGED
File without changes

4

個人情報を消した

2020/12/15 14:18

投稿

skateboard
skateboard

スコア0

test CHANGED
File without changes
test CHANGED
@@ -17,14 +17,6 @@
17
17
  他:!%
18
18
 
19
19
 
20
-
21
- //学生番号:I17I085
22
-
23
- //氏名:三木 望夢
24
-
25
- //作成日:2020/12/09
26
-
27
- //内容:文字列を入力し文字列より種類別の文字列を抽出し表示する
28
20
 
29
21
 
30
22
 

3

while文を使用したのですが、希望通りの実行ができなくて困っています。アドバイスを頂けたら幸いです。

2020/12/15 14:08

投稿

skateboard
skateboard

スコア0

test CHANGED
File without changes
test CHANGED
@@ -15,6 +15,16 @@
15
15
  英字:aC
16
16
 
17
17
  他:!%
18
+
19
+
20
+
21
+ //学生番号:I17I085
22
+
23
+ //氏名:三木 望夢
24
+
25
+ //作成日:2020/12/09
26
+
27
+ //内容:文字列を入力し文字列より種類別の文字列を抽出し表示する
18
28
 
19
29
 
20
30
 
@@ -38,7 +48,7 @@
38
48
 
39
49
  int num_cnt;
40
50
 
41
-
51
+
42
52
 
43
53
  printf("文字列:"); scanf("%s",str);
44
54
 
@@ -60,51 +70,47 @@
60
70
 
61
71
  int extnum(const char *s,char *m){
62
72
 
63
- char *t;
73
+ int cnt=0;
64
74
 
65
- int cnt=0;
75
+ int c;
76
+
77
+ while((c=*s++)){
78
+
79
+ if('0'<=c&&c <='9'){
80
+
81
+ if('a'<=c&&c<='z'){
82
+
83
+ if('A'<=c&&c<='Z'){
84
+
85
+ if((0x00<=c&&c<=0x2f) ||
86
+
87
+ (0x3a<=c&&c<=0x40)||
88
+
89
+ (0x56<=c&&c<=0x60) ||
90
+
91
+ (0x7b<=c)){
92
+
93
+ cnt++;
66
94
 
67
95
 
68
96
 
69
- for(t=(char *)s; *t !='\0'; t++){
97
+ }
70
98
 
71
- if('0'<=*t && *t<='9'){
99
+ }
72
100
 
73
- printf("%c",*t);
74
101
 
102
+
75
- cnt++;
103
+ }
76
104
 
77
105
  }
78
106
 
79
- for(t=(char *)s; *t !='\0'; t++){
107
+ }
80
108
 
81
- if('a'<=*t && *t<='z'){
82
109
 
83
- printf("%c",*t);
84
110
 
85
- cnt++;
111
+
86
112
 
87
- }
88
-
89
- for(t=(char *)s; *t !='\0'; t++){
90
-
91
- if('A'<=*t && *t<='Z'){
92
-
93
- printf("%c",*t);
94
-
95
- cnt++;
96
-
97
- }
98
-
99
-
100
-
101
-
102
-
103
- }
104
-
105
- }
106
-
107
- }printf("\n");
113
+ printf("\n");
108
114
 
109
115
  return(cnt);
110
116
 

2

for文とif分を書いたのですが、無限ループになります。解決策を教えください。

2020/12/15 14:05

投稿

skateboard
skateboard

スコア0

test CHANGED
File without changes
test CHANGED
@@ -44,15 +44,13 @@
44
44
 
45
45
 
46
46
 
47
-
48
-
49
47
  num_cnt=extnum(str,num);
50
48
 
51
- //printf("文字列:%s 数字文字列:%s\n",str,num);
49
+
52
50
 
53
51
  printf("数字文字数:%d\n",num_cnt);
54
52
 
55
-
53
+
56
54
 
57
55
  return(0);
58
56
 
@@ -78,12 +76,36 @@
78
76
 
79
77
  }
80
78
 
79
+ for(t=(char *)s; *t !='\0'; t++){
80
+
81
+ if('a'<=*t && *t<='z'){
82
+
83
+ printf("%c",*t);
84
+
85
+ cnt++;
86
+
87
+ }
88
+
89
+ for(t=(char *)s; *t !='\0'; t++){
90
+
91
+ if('A'<=*t && *t<='Z'){
92
+
93
+ printf("%c",*t);
94
+
95
+ cnt++;
96
+
97
+ }
98
+
99
+
100
+
101
+
102
+
103
+ }
104
+
105
+ }
106
+
81
107
  }printf("\n");
82
108
 
83
109
  return(cnt);
84
110
 
85
111
  }
86
-
87
-
88
-
89
- ここまでは書いたのですが、英字とその他の抽出するにはどうすればよろしいですか?

1

現時点でのソースコードを書きました

2020/12/15 13:36

投稿

skateboard
skateboard

スコア0

test CHANGED
File without changes
test CHANGED
@@ -18,4 +18,72 @@
18
18
 
19
19
 
20
20
 
21
+ #include<stdio.h>
22
+
23
+ #include <string.h>
24
+
25
+
26
+
27
+ #define NUM 201
28
+
29
+
30
+
31
+ int extnum(const char *s, char *m);
32
+
33
+
34
+
35
+ int main(void){
36
+
37
+ char str[NUM],num[NUM];
38
+
39
+ int num_cnt;
40
+
41
+
42
+
43
+ printf("文字列:"); scanf("%s",str);
44
+
45
+
46
+
47
+
48
+
49
+ num_cnt=extnum(str,num);
50
+
51
+ //printf("文字列:%s 数字文字列:%s\n",str,num);
52
+
53
+ printf("数字文字数:%d\n",num_cnt);
54
+
55
+
56
+
57
+ return(0);
58
+
59
+ }
60
+
61
+
62
+
63
+ int extnum(const char *s,char *m){
64
+
65
+ char *t;
66
+
67
+ int cnt=0;
68
+
69
+
70
+
71
+ for(t=(char *)s; *t !='\0'; t++){
72
+
73
+ if('0'<=*t && *t<='9'){
74
+
75
+ printf("%c",*t);
76
+
77
+ cnt++;
78
+
79
+ }
80
+
81
+ }printf("\n");
82
+
83
+ return(cnt);
84
+
85
+ }
86
+
87
+
88
+
21
- このソースコードをのよに書いたらよいわかりません!大至急教えてください!!
89
+ こまでは書いたですが、英字とその他の抽出するにはどうすればろしです