質問編集履歴

1

文法の修正、質問を具体的に修正

2019/06/07 14:34

投稿

oikawaR
oikawaR

スコア12

test CHANGED
@@ -1 +1 @@
1
- ブロックソートの変換処理、巡回シフト、二次
1
+ ブロックソートの変換処理(辞書式順ソート、入力の文字と一致する行番号を出力)
test CHANGED
@@ -1,4 +1,4 @@
1
- 現在、社会人で転職のために独学でc言語を学習しています。情報処理技術者試験の問題で練習し、実力をつけようと考えていますが、応用情報27年度問3で躓きました。色々調べ、自力で解こうとしましたができませんでした。コードで、直したほうがいい箇所を教えください。
1
+ 現在、社会人で転職のために独学でc言語を学習しています。c言語の入門書を1周した程度。情報処理技術者試験の問題で練習していますが、応用情報27年度問3で躓きました。色々調べ、自力で解こうとしましたができませんでした。コードで、直したほうがいい箇所、皆さんならどんなコーディングするのかを教えください。[問題元のリンク](https://www.ap-siken.com/kakomon/27_haru/pm03.html)
2
2
 
3
3
  ```c
4
4
 
@@ -10,27 +10,27 @@
10
10
 
11
11
  int main(void){
12
12
 
13
- int moji[1000],moto[1000];
13
+ char moji[100],moto[100],tmp[100][100];
14
14
 
15
- int i=0,j=0,k=0,suu,tmp[1000][1000];
15
+ int i=0,j=0,k=0,suu,flag;
16
16
 
17
- int jisyo[1000][1000];
17
+ char henkan[100][100];
18
18
 
19
19
 
20
20
 
21
21
  printf("半角英字で文字入力:");
22
22
 
23
- scanf("%d",moji);
23
+ scanf("%s",moji);
24
24
 
25
25
 
26
26
 
27
- 文字数を数える
27
+ /* 文字数を数える */
28
28
 
29
29
  for(suu=0; moji[suu]!='\0';suu++);
30
30
 
31
31
 
32
32
 
33
- 入力した文字列を保存
33
+ /* 入力した文字列を保存 */
34
34
 
35
35
  for(i = 0;i <= suu;i++){
36
36
 
@@ -40,7 +40,7 @@
40
40
 
41
41
 
42
42
 
43
- 配列moji内で文字数分繰り返す
43
+ /* 配列moji内で文字数分繰り返す */
44
44
 
45
45
  for(i = 0;i < suu-1;i++){
46
46
 
@@ -54,7 +54,7 @@
54
54
 
55
55
 
56
56
 
57
- 繰り返した文字列ごとに巡回シフト、後ろに行くほどシフト回数が増える
57
+ /* 繰り返した文字列ごとに巡回シフト、後ろに行くほどシフト回数が増える */
58
58
 
59
59
  for(k = 0;k <= suu-1;k++){
60
60
 
@@ -76,7 +76,7 @@
76
76
 
77
77
 
78
78
 
79
- 上記の配列は直線上なので、正方形型にするために二次元配列を利用する。
79
+ /* 上記の配列は直線上なので、正方形型にするために二次元配列を利用する。 */
80
80
 
81
81
  for(i=0;i<suu;i++){
82
82
 
@@ -84,7 +84,7 @@
84
84
 
85
85
  for(k=i*suu;k<=i*suu+suu-1;k++){
86
86
 
87
- jisyo[i][j] = moji[k];
87
+ henkan[i][j] = moji[k];
88
88
 
89
89
  }
90
90
 
@@ -92,19 +92,41 @@
92
92
 
93
93
  }
94
94
 
95
- ここからやりたいこと
96
-
97
- 辞書式順にソート
98
-
99
-
100
-
101
- 行の最後の文字を一つずつ順に取り出す。それが変換結果となり、出力する。
102
-
103
-
104
-
105
- 入力した文字列と一致する文字列の行番号を出力する。
106
95
 
107
96
 
97
+ /* 辞書式順にソート */
98
+
99
+
100
+
101
+ /* 行の最後の文字を一つずつ順に取り出す。それが変換結果となり、出力する。 */
102
+
103
+
104
+
105
+ /* 入力した文字列と一致する文字列の行番号を出力する。 */
106
+
107
+ while(moto[i]!='\0' && henakn[i]!='\0'){
108
+
109
+ if(moto[i]=henkan[i]){
110
+
111
+ i++;
112
+
113
+ if(moto[i]='\0' && henkan[i]='\0'){
114
+
115
+ flag = 1
116
+
117
+ break;
118
+
119
+ }
120
+
121
+ }
122
+
123
+ else
124
+
125
+ break;
126
+
127
+ }
128
+
129
+ printf("%s, ",);
108
130
 
109
131
  }
110
132