Вот посмотрите этот код. Какие общие замечания? По-прежнему есть проблемы с пробелами во входной строке, может кто подскажет. И ещё насколько здесь оправдано использование ввода/вывода через потоки? Заранее спасибо.
| Код | //------------------------------------------------------------- #include <stdio.h> #include <conio.h> #include <string.h> //------------------------------------------------------------- #define Nmax 128 //------------------------------------------------------------- typedef struct IS { char symbol; int index; } isymbol; void sort(struct IS[], int); void bisearch(struct IS[], char, int); //------------------------------------------------------------- void main() { char buffer[Nmax]; char key;
clrscr(); printf("===========================Binary search========================\n"); printf(" Enter the string and press Enter: "); scanf("%s",buffer);
int i,size; size = strlen(buffer); isymbol string[Nmax];
for (i = 0; i < size; i++) { string[i].symbol = buffer[i]; string[i].index = i+1; }
sort (string, size);
do { printf("\n Enter the key symbol to search and press Enter:"); key = getch(); printf(" %c\n",key); printf("\n=============================Search=============================\n"); bisearch(string, key, size); printf("\n Press y to continue, any other key to exit:"); } while (getch()=='y'); } //------------------------------------------------------------- void sort(struct IS s[], int size) { int i,j; isymbol temp; for (i = 0; i < size - 1; i++) { for (j = 1; j < size - i; j++) { if (s[j - 1].symbol > s[j].symbol) { temp = s[j]; s[j] = s[j - 1]; s[j - 1] = temp; } } } } //------------------------------------------------------------- void bisearch(struct IS s[], char key, int size) { int m = 0, l = 0, r = size - 1; while (l < r) { m = (l + r) / 2; if (s[m].symbol < key) l = m + 1; else r = m; } if (s[r].symbol == key) { printf("\n Position(s) of key symbol %c are: ", key); do { printf(" %d", s[r].index); r++; } while (s[r].symbol == key); } else printf("\n Position(s) of key symbol %c are: No solution", key); }
|
|