统计数字、空白符及其其他字符
#include <stdio.h> /* 统计数字、空白符及其其他字符 */ main() { int c, i, nwhite, nother, ndigit[0]; nwhite = nother = 0; for(i = 0; i < 10; i++) ndigit[i] = 0; while((c = getchar()) != EOF){ switch(c){ case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': ndigit[c-'0']++; break; case ' ': case '\n': case '\t': nwhite++; break; default: nother++; break; } } printf("digits ="); for(i = 0; i < 10; i++) printf(" %d", ndigit[i]); printf(", white space = %d, other = %d\n", nwhite, nother); return 0; }
aroi函数:将s转换为整数型
#include <ctype.h> /* aroi函数:将s转换为整数型;版本2 */ int atoi(char s[]) { int i, n, sign; for(i = 0; isspace(s[i]); i++) /* 跳过空白符 */ ; sign = (s[i] == '-') ? -1 : 1; if(s[i] == '+' || s[i] == '-') /* 跳过符号 */ i++; for(n = 0; isdigit(s[i]); i++) n = 10 * n + (s[i] - '0'); return sign * n; }
shellsort函数:按递增顺序对v[0]...v[n-1]进行排序(PS:使用shell算法)
/* shellsort函数:按递增顺序对v[0]...v[n-1]进行排序 */ void shellsort(int v[], int n) { int gap, i, j, temp; /* 逐步对折,直到两个比较元素之间距离为0 */ for(gap = n/2; gap > 0; gap /= 2) /* 元素间移动位置 */ for(i = gap; i < n; i++) /* 比较大小,逆序时互换位置 */ for(j = i-gap; j >= 0 && v[j] > v[j+gap]; j -= gap){ temp = v[j]; v[j] = v[j+gap]; v[j+gap] = temp; } }
reverse函数:倒置字符串s中各个字符的位置
#include <srting.h> /* reverse函数:倒置字符串s中各个字符的位置 */ void reverse(char s[]) { int c, i, j; for(i = 0, j = strlen(s)-1; i < j; i++, j--){ c = s[i]; s[i] = s[j]; s[j] = c; } }
可以看成是一个单步操作
for(i = 0, j = strlen(s)-1; i < j; i++, j--){ c = s[i], s[i] = s[j], s[j] = c; }
itoa函数:将数字n转换为字符串并保存到s中
/* itoa函数:将数字n转换为字符串并保存到s中 */ void itoa(int n, char s[]) { int c, sign; if((sign = n) < 0) /* 记录符号 */ n = -n; /* 使n成为正数 */ i = 0; do{ /* 以反序生成数字 */ s[i++] = n % 10 + '0'; /* 取下一个数字 */ }while((n /= 10) > 0); /* 删除该数字 */ if(sign < 0) s[i++] = '-'; s[i] = '\0'; reverse(s); }
trim函数:删除字符串尾部的空格符、制表符和换行符
/* trim函数:删除字符串尾部的空格符、制表符和换行符 */ int trim(char s[]) { int n; for(n = strlen(s)-1; n >= 0; n--) if(s[n] != ' ' && s[n] != '\t' && s[n] != '\n') break; s[n+1] = '\0'; return n; }