c语言函数
编写一个函数,统计字符串字母,数字,空格和,其他字符的个数
#include <stdio.h>
#define N 1024
#include <ctype.h>
void isgeshu(char str[])
{
int num = 0,kongge = 0,i = 0,alpha = 0;
int ascii;
for(i = 0;str != '\n';i++)
{
if(str >= '0'&&str <= '9')
{
num++;
}
if(isspace(str[i);
{
kongge++;
}
if(isalpha(str))
{
alpha++;
}
}
printf("数字的个数是:%d\n",num);
printf("空格的个数是:%d\n",kongge);
printf("字母的个数是%d",alpha);
}
int main(void)
{
int i = 0;
char str;
printf("请输入一个字符串:");
while((str = getchar()) != '\n');
isgeshu(str);
return 0;
}
空格的个数为什莫不对
如果其他字符也打印出来怎末办 你这个思路大体没问题,但是应该显示编译错误根本运行不了吧,你格式都错了 本帖最后由 jackz007 于 2021-11-15 18:10 编辑
#include <stdio.h>
#define N 1024
void isgeshu(char str[])
{
int num = 0 , kongge = 0 , i = 0 , alpha = 0 , others = 0 , d = 0 , w = 0 ;
for(i = 0 ; str ; i ++)
{
if(str >= '0' && str <= '9') num ++ ;
else if((str >= 'A' && str <= 'Z') || (str >= 'a' && str <= 'z')) alpha ++ ;
else if(str == ' ') kongge ++ ;
else if(str == ',') d ++ ;
else if(str == '?') w ++ ;
else others ++ ;
}
printf("数字的个数是 : %d\n" , num) ;
printf("字母的个数是 : %d\n" , alpha) ;
printf("空格的个数是 : %d\n" , kongge) ;
printf("逗号的个数是 : %d\n" , d) ;
printf("问号的个数是 : %d\n" , w) ;
printf("其他字符个数是 : %d\n" , others) ;
}
int main(void)
{
int i = 0 ;
char str ;
printf("请输入一个字符串 : ") ;
while((str = getchar()) != '\n') ;
str = '\0' ;
isgeshu(str) ;
return 0 ;
}
编译、运行实况:
D:\0002.Exercise\C>g++ -o x x.c
D:\0002.Exercise\C>x
请输入一个字符串 : I am a chinese, and i am 21 years old !
数字的个数是 : 2
字母的个数是 : 25
空格的个数是 : 10
逗号的个数是 : 1
问号的个数是 : 0
其他字符个数是 : 1
D:\0002.Exercise\C> yumou 发表于 2021-11-15 17:40
你这个思路大体没问题,但是应该显示编译错误根本运行不了吧,你格式都错了
你这跟没说一样,我就是不知道哪错了才问的呀 jackz007 发表于 2021-11-15 17:51
编译、运行实况:
如果把对应其他字符的个数打印出来呢,比如打印出
,的个数是什么
?的个数是什么 林江楠 发表于 2021-11-15 17:53
如果把对应其他字符的个数打印出来呢,比如打印出
,的个数是什么
?的个数是什么
3 楼代码已经添加了相应的功能,楼主可以测试。 jackz007 发表于 2021-11-15 18:01
3 楼代码已经添加了相应的功能,楼主可以测试。
ok jackz007 发表于 2021-11-15 17:51
编译、运行实况:
第31行str里面不是有数据吗,为什莫设置为结束符 林江楠 发表于 2021-11-15 19:13
第31行str里面不是有数据吗,为什莫设置为结束符
因为这一句
while((str = getchar()) != '\n') ;
无论 str[ i ] 是否是 '\n' 都会执行 i ++,那么,在最后 while 循环结束时,str = '\n',这个换行符显然不是我们希望的,所以,就把它直接变成字符串结束符。 jackz007 发表于 2021-11-15 17:51
编译、运行实况:
为什莫我的代码编译运行实况是这样的
请输入一个字符串:jwidas123
数字的个数是:3
空格的个数是:10
字母的个数是:0
其他字符的个数是10
林江楠 发表于 2021-11-15 19:21
为什莫我的代码编译运行实况是这样的
请输入一个字符串:jwidas123
你的代码显然不是 3 楼的,看看我用 3 楼代码的运行实例:
D:\00.Excise\C>x
请输入一个字符串 : jwidas123
数字的个数是 : 3
字母的个数是 : 6
空格的个数是 : 0
逗号的个数是 : 0
问号的个数是 : 0
其他字符个数是 : 0
D:\00.Excise\C> jackz007 发表于 2021-11-15 19:19
因为这一句
无论 str[ i ] 是否是 '\n' 都会执行 i ++,那么,在最后 while 循环结 ...
str是'\n'不就会退出循环吗,为什莫会i++ 本帖最后由 jackz007 于 2021-11-15 20:04 编辑
林江楠 发表于 2021-11-15 19:41
str是'\n'不就会退出循环吗,为什莫会i++
i ++ 的执行和 str[ i ] 是否是 '\n' 无关,这个是知识点,是需要死记的。 jackz007 发表于 2021-11-15 20:02
i ++ 的执行和 str[ i ] 是否是 '\n' 无关,这个是知识点,是需要死记的。
这。。。。。。
页:
[1]