统计数字、空白符及其其他字符
#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;
}
字符处理与排序算法
5万+

被折叠的 条评论
为什么被折叠?



