#include<stdio.h> #include<string.h> #define col 10 char* cut_word(char str[], int* pos) { char static sub[10]; int j = 0; while (str[*pos] == ' ') { (*pos)++; } while (str[*pos] != ' ' && str[*pos] != '\0') { sub[j++] = str[(*pos)++]; } sub[j] = '\0'; return sub; } void bubble_sort(char str[][col], int num[], int row) { int flag, i, j; for (i = 1; i < row; i++) { flag = 0; for (j = 0; j < row - i; j++) { if (stricmp(str[j], str[j + 1]) > 0) { char t[10]; //数组元素互换 strcpy(t, str[j]); strcpy(str[j], str[j + 1]); strcpy(str[j + 1], t); int k; //单词个数交换 k = num[j]; num[j] = num[j + 1]; num[j + 1] = k; flag = 1; } } if (flag == 0) break; } } int main() { int key = 0, num[100] = { 0 }, temp = 1, pos = 0; char strstr[1000], * substr, newstr[100][10]; gets(strstr); substr = cut_word(strstr, &pos); strcpy(newstr[key], substr); num[key]++; key++; while (1) { substr = cut_word(strstr, &pos); temp = 1; //看是否和newstr中的行元素有相同的 for (int j = 0; j < key; j++) { if (strcmp(substr, newstr[j]) == 0) { num[j]++; temp = 0; break; } } //找到新的单词 if (temp) { strcpy(newstr[key], substr); num[key]++; key++; } if (strstr[pos] == '\0') break; } //字符串大小比较字典排序 冒泡 bubble_sort(newstr, num, key); for (int i = 0; i < key; i++) printf("%-10s%d\n", newstr[i], num[i]); return 0; }这个代码的*pos为什么可以表示数组str的哪一位呢
时间: 2024-04-05 13:35:15 浏览: 143
数据结构#include<stdio.h>
这个代码中的`*pos`表示当前字符串`str`中需要处理的位置,也就是下一个单词的起始位置。由于在函数`cut_word`中,每次处理完一个单词后都会将`*pos`加1,因此可以实现逐个处理字符串中的单词。在主函数中,每次调用`cut_word`函数时都将`pos`的地址作为参数传递给了函数,这样函数内部就可以改变`pos`的值,从而实现逐个处理字符串中的单词。
阅读全文