使用指針數組 `char *name[4]` 存儲 4 個字符串,已實現輸入、排序、輸出,需補充 `search` 函數實現按名稱查找並輸出序號。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void input(char *name[], int n);
void sort(char *name[], int n);
void print(char *name[], int n);
void search(char *name[], int n);
int main() {
char *name[4];
int n = 4;
input(name, n);
sort(name, n);
print(name, n);
search(name, n);
// 釋放內存
for (int i = 0; i < n; i++) free(name[i]);
return 0;
}
void input(char *name[], int n) {
int i;
printf("請輸入4個字符串:\n");
for (i = 0; i < n; i++) {
name[i] = (char *)malloc(32 * sizeof(char)); // 分配足夠空間
gets(name[i]); // 注意:gets 不安全,建議用 fgets
}
}
void sort(char *name[], int n) {
char *temp;
int i, j, k;
for (i = 0; i < n - 1; i++) {
k = i;
for (j = i + 1; j < n; j++)
if (strcmp(name[k], name[j]) > 0)
k = j;
if (k != i) {
temp = name[i];
name[i] = name[k];
name[k] = temp;
}
}
}
void print(char *name[], int n) {
int i;
printf("字符串排序結果:\n");
for (i = 0; i < n; i++)
printf("%s\n", name[i]);
}
void search(char *name[], int n) {
char str[32] = {0};
printf("請輸入要查找的字符串: ");
scanf("%s", str);
int i;
for (i = 0; i < n; i++) {
if (strcmp(name[i], str) == 0) {
printf("找到字符串,序號為: %d\n", i + 1);
return;
}
}
printf("未找到字符串\n");
}
指針數組操作字符串的核心是「管理指針,不動數據」。查找函數只需線性遍歷配合 `strcmp` 即可,清晰高效。