在ascII表中键盘可输入字符是连续的,不包括空格是从33到126,所以可以定义一个128的数组,做个简单hash,输入的字符作hash
key。实现如下:
#include
<stdioh>
int
main()
{
char
a[1024]
=
{0};
/接收输入的字符,由于gets不检查长度,所以弄大点/
int
hash_tbl[128]
=
{0};/hash
表/
int
i;
printf("Please
input
string:\
");
gets(a);/从标准输入读字符/
for(i=0;
a[i]!='\\0';
i++)
{
hash_tbl[(int)a[i]]++;/计算输入字符的个数/
}
/打印非零字符的个数/
for(i=33;
i<126;
i++)
{
if
(hash_tbl[i]>0)
{
printf("%c
num
is:
%d\
",
i,
hash_tbl[i]);
}
}
return
0;
}
这题没有进位 直接按byte相加再减0x30 就能得到目标字串 3,6的ASCII值是0x33和0x36 相加得到0x69 再减去0x30 得到0x39也就是ASCII的9 当然 你要是考虑进位 那么从字串尾部的个位向高位计算 并且当结果大于0x3a时请减去0 然后下一位计算时要累加进位1
此程序可通过以下步骤实现:
1、输入一个正整数
2、将整数转换为字符串(使用sprintf函数)
3、求字符串的长度(strlen函数),即正整数的位数
代码如下:
#include <stdioh>#include <stringh>
int main()
{
long num;
char str[20];
scanf("%ld", &num);
sprintf(str, "%ld", num);
printf("%d", strlen(str));
return 0;
}
这样写主要是考虑到整数的前面可能有0,比如:00090,是两位数。如果确认没有前置0的话,可以简化过程,省去转换为字符串的过程,直接用gets得到字符串。
int delete_sub_str(const char str, const char sub_str, char result_str) {//认为 result_str长度足够
int size1=strlen(str),size2=strlen(sub_str);
size_t i,j,n=0,k;
int pi;
if(size1<size2){//长度不够
pch=new char[size1+1];
for( i=0;i<=size1;i++)result_str[i]=str[i];
return 0;
}
pi=new int[size1/size2];//按最大可能分配pi
for(i=0;i<size1-size2;i++){//记录子窜起始下标
if(str[i]==sun_str[0]){//判断是否为子窜起始
for(j=1;j<size2;j++){
if(str[i+j]!=sub_str[j])break;
}
if(j==size2){
pi[n++]=i;
i=i+size2-1;
}
}//if
}//for
for(i=0,j=0,k=0;i<n;i++){//拷贝前n断非子窜部分
for(;j<pi[i];j++,k++)result_str[k]=str[j];
j=p[i]+size2;
}
for(;j<size1;j++,k++)result_str[k]=str[j];//拷贝最后一部分非子窜
result_str[k]='\0;//尾部+0
delete[]pi;
return n;
}//delete
c语言编写计算字符串长度的程序是一个经典的面试问题,有几种经典的答案:
1,循环
定义一个指针 char p = str;
int count = 0;
while (p != \0){
p++; count++;
}
2, 递归
3,最简短的,利用地址的差
while(p++);
len = p - str;
#include "stdioh"
#include "stdlibh"
void main()
{
FILE fp;
char ch;
int charCounts=0,numCounts=0;
if((fp=fopen("testtxt","r"))==0)//注意,由于我不知道你想打开的文件的位置和名称,我随意写的一个文件名,你自己要按你文件的路径和名称做修改
{
printf("文件读取失败!\n");
exit(0);
}
while((ch=fgetc(fp))!=EOF)
{
if(ch>='0'&&ch<='9')
numCounts++;
else
charCounts++;
}
printf("该文件中数字字符共有%d个,除数字这外的其它字符共有%d个。\n",numCounts,charCounts);
fclose(fp);
}
getchar语句将B读入,赋值给a,即a=B;
scanf语句将第一个33读入,赋值给b,即b=33;
a=a-'A'+'0';以字符的ASCII码值进行运算,B的ASCII码值减A的ASCII码值加0的ASCII码值,结果再对应字符,赋值给a;
b=b2;即b=332=66;
最后将a,b的值看成ASCII码值,其分别对应的字符输出,以空格做间隔。
以上就是关于C语言编程! 编写程序,计算输入的数字、字母和其他字符的个数。全部的内容,包括:C语言编程! 编写程序,计算输入的数字、字母和其他字符的个数。、关于C语言字符串中数字的运算、如何用程序计算一个正整数的字符串长度等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)