C语言编程! 编写程序,计算输入的数字、字母和其他字符的个数。

C语言编程! 编写程序,计算输入的数字、字母和其他字符的个数。,第1张

在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语言字符串中数字的运算、如何用程序计算一个正整数的字符串长度等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9817169.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存