「文字列のソート」(2005/11/07 (月) 06:11:48) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
<dl>
<dt>183 :<a href="mailto:sage"><b>デフォルトの名無しさん</b></a>
:2005/11/02(水) 15:04:20</dt>
<dd>[1] 授業単元:プログラミング実習<br>
[2] 問題文(含コード&リンク):<br>
文字列を用いて5人文の名前を入力し表示するプログラムを作りなさい。<br>
ただし名前の頭文字のアルファベット順に並べ変えて表示すること<br>
[3] 環境<br>
[3.1] OS: Linux<br>
[3.2] コンパイラ名とバージョン: gcc<br>
[3.3] 言語: C<br>
[4] 期限: ([2005年11月06日まで]<br>
[5] その他の制限:配列あたりまで習っています。<br>
なんか急に難しくなってきた気がしてお手上げです。<br>
どうか宜しくお願いします。<br>
<br></dd>
<dt>184 :<a href="mailto:sage"><b>デフォルトの名無しさん</b></a>
:2005/11/02(水) 15:20:42</dt>
<dd><a href="http://pc8.2ch.net/test/read.cgi/tech/1130431335/183" target=
"_blank">>>183</a><br>
#include <stdio.h><br>
#include <string.h><br>
typedef char string[256];<br>
int main() {<br>
int i, j; string s[5], tmp;<br>
for (i = 0; i < 5; ++i) { printf("name%d: ", i); scanf("%s", s[i]); }<br>
for (i = 0; i < 5; ++i) /* sort */<br>
for (j = i+1; j < 5; ++j)<br>
if (strcmp(s[i], s[j]) > 0)<br>
strcpy(tmp, s[i]), strcpy(s[i], s[j]), strcpy(s[j], tmp); /* swap
*/<br>
for (i = 0; i < 5; ++i) printf("%s\n", s[i]);<br>
}<br>
<br></dd>
<dt>185 :<a href="mailto:sage"><b>デフォルトの名無しさん</b></a>
:2005/11/02(水) 15:23:10</dt>
<dd>/*<br>
*
文字列を用いて5人文の名前を入力し表示するプログラムを作りなさい。<br>
*
ただし名前の頭文字のアルファベット順に並べ変えて表示すること<br>
*/<br>
#include <stdio.h><br>
#include <string.h><br>
#include <stdlib.h><br>
#define NAMEMAX 20<br>
/* クイックソートかバブルか選択 */<br>
#define BUBBLE 0<br>
#define QUICK 1<br>
<br>
typedef char Name[NAMEMAX+1];<br>
<br>
void swap(Name*, int, int);<br>
int comp(const Name*, const Name*);<br>
<br>
int main(void)<br>
{<br>
Name names[5], tmp;<br>
int i, j;<br>
<br>
for (i=0;i<5;i++) {<br>
j = scanf("%s", &names[i]);<br>
if (!j) {<br>
puts("Invalid!!");<br>
return -1;<br>
}<br>
}<br>
<br></dd>
<dt>186 :<a href="mailto:sage"><b>デフォルトの名無しさん</b></a>
:2005/11/02(水) 15:24:10</dt>
<dd>#if (BUBBLE)<br>
for (i=4;i>=0;i--)<br>
for (j=0;j<i;j++)<br>
if (strcmp(&names[j][0], &names[j+1][0]) > 0)<br>
swap(names, j, j+1);<br>
#endif<br>
<br>
#if (QUICK)<br>
qsort(names, 5, sizeof(Name), (int (*)(const void*, const void*))comp);<br>
#endif<br>
<br>
putchar('\n');<br>
for (i=0;i<5;i++)<br>
printf("%s\n", names[i]);<br>
return 0;<br>
}<br>
<br>
void swap(Name *array, int op1, int op2)<br>
{<br>
Name tmp;<br>
<br>
strcpy(tmp, array[op1]);<br>
strcpy(array[op1], array[op2]);<br>
strcpy(array[op2], tmp);<br>
}<br>
<br>
int comp(const Name* n1, const Name* n2)<br>
{<br>
return strcmp(n1[0], n2[0]);<br>
}</dd>
</dl>
表示オプション
横に並べて表示:
変化行の前後のみ表示: