int counters[27] = {0};
for(int i=0;i<=25;i++)
cutor[t-'A']++;
效果如图,如有帮助给个采纳谢谢:
修改后代码如下 , 如有帮助给个采纳谢谢:
需要注意的是 gets(s);
在c11 中已经废弃了 , 建议换成 fgets(s, sizeof(s), stdin);
#include <stdio.h>
#include <string.h>
void countstr(char *st,int cutor[]);
int main()
{
char s[1000];
//found
int counters[27]={0},i; // (1) 初始化为 0
printf("Input a string\n");
gets(s);
countstr(s,counters);
// *****found *
for(i = 0; i <=25 ; i++) // (2) i 的取值为 0-25
printf("%c : %d\n",i+65,counters[i]);
printf("others : %d\n",counters[i]);
}
void countstr(char *st,int cutor[])
{
int i,j;
char t;
i = strlen(st);
for(j = 0;j< i; j++)
{
t = st[j];
if(t >= 'a' && t <= 'z')
t =t- 'a' +'A';
if(t >= 'A' && t <= 'Z')
// *found
cutor[t - 'A']++; // (3) 用字符 A 的 ASCII 码值做差
else
cutor[26]++;
}
}
在之前我们用strlen函数写了可以求字符串的长度
//求字符串长度的函数 strlen
#include <string.h>
int My_strlen(char* s)
{
int count = 0;
while(*s != '\0')
{
count++;
s++;
}
return count;
}
int main()
{
char arr[] = "abc";
int len =My_strlen(arr);
printf("%d\n", len);
return 0;
}
同样我们也可以使用指针减指针的方法
int My_strlen(char* s)
{
char* start = s;
while (*s != '\0')
{
s++;
}
return s - start;
}
int main()
{
char arr[] = "abc";
int len =My_strlen(arr);
printf("%d\n", len);
return 0;
}
分析:
int main()
{
float a[5];
float* p;
for (p = &a[5]; p >= &a[0];)
{
*--p = 0;
}
return 0;
}
改进:
for (p = &a[4]; p >= &a[0]; p--)
{
*p = 0;
}
指针 -- 地址
数组 -- 一组相同类型的数据
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//arr首元素地址
int* p = arr;
int i = 0;
for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
printf("%p == %p \n", p + i,&arr[i]);
}
return 0;
}
分析:
int arr[10] = {1,2,3,4,5,6,7,8,9,0};int *p = arr;//p存放的是数组首元素的地址
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,0 };
int* p = arr; //指针存放数组首元素的地址
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("&arr[%d] = %p <====> p+%d = %p\n", i, &arr[i], i, p + i);
}
return 0;
}
所以 p+i 其实计算的是数组 arr 下标为i的地址
int main()
{
int a = 10;
int* pa = &a;
int** ppa = &pa; //ppa就是一个二级指针
**ppa = 20;
printf("%d\n",a);
return 0;
}