したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

さらみ1

84名前とか無いよ、うん:2008/07/01(火) 22:37:44 ID:5fh3Nsws0
#include<stdio.h>
#include<string.h>

#define MAXDATA 100
#define MAXTAB 512
#define MAXWORD 80

int len_tab[MAXDATA];
char name_tab[MAXTAB];
char *avlp=name_tab;

void put_tab(char *,int);
void prt_all(int n);
* 追加した宣言 */
void prt_all_a(int n);

int main()
{
int n=0,len;
char buf[MAXWORD];

while ((scanf("%s",buf)>0)&&(n<MAXDATA)) {
len=strlen(buf);
len_tab[n++]=len;
put_tab(buf,len);
}
prt_all(n);
/* ここから */
printf("------------------------\n");
prt_all_a(n);
/* ここまで追加 */
return 0;
}
void put_tab(char *cp, int len)
{
char *tabp;
tabp = avlp;
avlp += len;
while (len-- > 0)
*tabp++ = *cp++;
}
void prt_all(int n)
{
int i, j, len;
char *tabp;
tabp = name_tab;

for (i = 0; i < n; i++) {
len = len_tab[i];
printf("%4d%6d: ", i, len);
for (j = 0; j < len; j++)
putchar(*tabp++);
printf("\n");
}
}

/* 重複した分を1つにして表示する関数実装部 */
/* Linuxでは動かしてないのでどうなるかまでは分かりません */
void prt_all_a(int n)
{
int i, j, len;
int flag = 0, num = 0;
char data_tmp[MAXDATA][MAXWORD];
char *tabp;
tabp = name_tab;

for (i = 0; i < n; i++) {
len = len_tab[i];
for (j = 0; j < len; j++)
data_tmp[i][j] = *tabp++;
data_tmp[i][j] = '\0';
}

for(i = 0; i < n; i++) {
len = len_tab[i];
for(j = 0; j < i; j++) {
if(strcmp(data_tmp[i], data_tmp[j]) == 0) {
flag = 1;
break;
}
}
if(flag == 0) {
printf("%4d%6d: %s\n", num, len, data_tmp[i]);
num++;
}
flag = 0;
}
}

単語の重複を表示しないようにして文字数をカウントするんだったかな
まあ、これもあんまりスマートじゃない


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板