回复 20楼 shmilyflf
是这样的。strlen1我本来的设想是计算每个字符串的长度,然后first_strlen我想计算每个字符串第一个单词的长度。貌似两个都没有实现我想要的功能。不知道该怎么改了。
回复 19楼 azzbcc
是这样的。strlen1我本来的设想是计算每个字符串的长度,然后first_strlen我想计算每个字符串第一个单词的长度。貌似两个都没有实现我想要的功能。不知道该怎么改了。
#include<stdlib.h> #include<ctype.h> #include<math.h> void FindNum(); void Diamond(); int menu_select(); void main() { for(;;) { switch(menu_select()) { case 1: FindNum(); break; case 2: Diamond(); break; case 3: printf("Goodbye!\n"); exit(0); } } } // 菜单选择操作 int menu_select() { char s; int cn; printf("1.FindNum\n"); printf("2.Diamond\n"); printf("3.Goodbye!\n"); printf("Input 1-3: "); do { s=getchar(); cn=(int)s-48; } while(cn<0 || cn>3); return cn; } // 求正确的数字完成等式 // 答案:nun=6 void FindNum() { int i; printf("要是下面的等式成立,应在__中填上哪个想同的数字?\n"); printf(" 3__*6237=__3*3564\n"); printf("求解结果为:\n"); for(i=1;1<10;i++) if((30+i)*6237==(10*i+3)*3564) { printf("number=%d\n",i); break; } } //编制打印菱形图案程序 void Diamond() { int i,j,k; printf("打印菱形图案。\n"); for(i=1;i<=4;i++) { for(j=1;j<=16-i;j++) printf(" "); for(k=1;k<=(2*i-1);k++) printf("*"); printf("\n"); } for(i=1;i<=3;i++) { for(j=1;j<=i+12;j++) printf(" "); for(k=1;k<=(7-2*i);k++) printf("*"); printf("\n"); } }
/* 读入若干字符串,并按格式输出 */ #include <stdio.h> #include <string.h> #define ROW 10 /* 最大限制字符串的数目 */ #define LINE 100 int getns (char *, int); /* 输入字符串的函数 */ void ascii (char **, int); /* 按照ASCII顺序的函数 */ void length (char **, int); /* 按长度递增顺序的函数 */ void first_length (char **, int); /* 按首单词长度递增顺序的函数 */ int first_strlen (char *); /* 比较首个单词长度的函数 */ void menu (void); /* 输出菜单选项的函数 */ int main (void) { char input[ROW][LINE]; char *ptrinput[ROW]; char choice; int row = 0; /* 字符串的数目 */ int i; puts ("Please enter a series of sentence."); while (row < ROW && gets (input[row])) { if (*input[row] == EOF) break; ptrinput[row] = input[row]; row++; } /* 将字符串赋予指针 */ menu (); while ((choice = getchar ()) != 'q') { if (choice == '\n') continue; switch (choice) { case 'a': { for (i = 0; i < row; i++) puts (ptrinput[i]); break; } case 'b': ascii (ptrinput, row); break; case 'c': length (ptrinput, row); break; case 'd': first_length (ptrinput, row); break; default: puts ("Please enter a, b, c, d or q:"); break; } menu (); } return 0; } /* 按照ASCII顺序的函数 */ void ascii (char ** p, int i) { int j, k, l; char *output[ROW]; for (j = 0; j < i; j++) { l = 0; for (k = 0; k < i; k++) { if (j == k) continue; if (strcmp (p[j], p[k]) >= 0) l++; } output[l] = p[j]; } for (l = 0; l < i; l++) puts (output[l]); } /* 按长度递增顺序的函数 */ void length (char ** p, int i) { char *output[ROW]; int length[ROW]; int j, k; int temp1; char *temp2; for (j = 0; j < i; j++) { length[j] = strlen (p[j]); output[j] = p[j]; } for (j = 0; j < i; j++) { for (k = j + 1; k < i; k++) { if (length[j] > length[k]) { temp1 = length[j]; length[j] = length[k]; length[k] = temp1; temp2 = output[j]; output[j] = output[k]; output[k] = temp2; } } } for (j = 0; j < i; j++) puts (output[j]); } /* 按首单词长度递增顺序的函数 */ void first_length (char ** p, int i) { char *output[ROW]; int length[ROW]; int j, k; int temp1; char *temp2; for (j = 0; j < i; j++) { length[j] = first_strlen (p[j]); output[j] = p[j]; } for (j = 0; j < i; j++) { for (k = j + 1; k < i; k++) { if (length[j] > length[k]) { temp1 = length[j]; length[j] = length[k]; length[k] = temp1; temp2 = output[j]; output[j] = output[k]; output[k] = temp2; } } } for (j = 0; j < i; j++) puts (output[j]); } /* 比较首个单词长度的函数 */ int first_strlen (char * p) { int i = 0; while (p[i] >= 'a' && p[i] <= 'z' || p[i] >= 'A' && p[i] <= 'Z' && p[i] == '\'') i++; return i; } /* 输出菜单选项的函数 */ void menu (void) { puts ("************************************************************************"); puts ("Please choose what to do:"); puts ("a. 输出初始字符列表 b. 按ASCII顺序输出字符串"); puts ("c. 按长度递增顺序输出字符串 d. 按字符串中第一个单词长度输出字符串"); puts ("q. Quit."); puts ("************************************************************************"); }