十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
getchar()函数的原型是 int getchar( void )
成都创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站制作、成都网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的曲松网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
返回值是整型的
功能是:从标准输入中读取一个字符,也就是键盘敲击字符,只接收单个字符
可以用gets()函数来接收多个字符
这里的 s 接收的是该字符的ASCII码,非长度。
如果从原基础上改可以这样
int i;
char s[20]; /*字符串需要长度*/
gets( s );
i = num( s );
int num( char *s ) /* 这里的指针 ,后面学得到*/
{
}
套上去就可以了
#include stdio.h
int main(void)
{
long long x;
int t,i,a;
char c;
for(scanf("%d%lld\n",t,x),i=1;i=t;i++)
{
while((c=getchar())!='\n'c!=EOF)
{
scanf("%d",a);
switch(c)
{
case '+':x+=a;break;
case '-':x-=a;break;
case '*':x*=a;break;
case '/':x/=a;break;
default:break;
}
}
printf("Case #%d:%lld\n",i,x);
}
return 0;
}
这是一种利用了栈技术的逆波兰算法,算法思想本身不难,难是难在下面这两点:
数据互换,比如char 与double、int互换.或 double、int与string互换等(它们互换都很繁琐).
提取数字含双精度类型(尤其是表达式里提取双精度数据类型是比较繁琐的)。当然也可只提取正整数(若是含有小数则不处理该表达式)。
下面是我写的一个逆波兰算法,由于代码较多发不上来(百度限制了提交),多达500行代码左右。如果你有兴趣想拿去研究的话,可以发给你。主要是用C\C++混合编写。
当然,如果你是使用C#编程语言的话,那么你将不会面对上述的繁琐问题,因为C#有强制型的数据转换功能。
下面是运行效果截图以及主函数的部分调用代码:
逆波兰算法主要是分为两步:
第一步:中缀表达式转为后缀表达式
第二步:对后缀表达式进行计算。
下面对算法原理进行逐一讨论:
逆波兰算法中的中缀转后缀的算法原理是这样的:
第一种情况:由表达式左边开始往右遍历,如果是数字则输出拼到后缀表达式里(出栈的元素也是一 样)。
第二种情况:如果是+-*/四则运算则判断栈顶元素的运算符是否大于当前的符号.(乘除优先于加减),
模拟:如果当前元素是+(或-),而栈顶元素是*(或除),那么,此时栈顶元素依此出栈直至栈顶元素 的优先级不大于当前元素。然后当前元素进栈。
第三种情况:如果当前元素是左括号"(",则进栈。--因为它待与右括号匹配。
第四种情况:如果当前元素是右括号")"则栈顶元素依此出栈,直至与它匹配的左括号"("出栈为止。
对后缀表达式进行计算原理是这样的:
对后缀表达式由左往右方向进行扫描,遇到数字则进栈,遇到运算符号则在栈里依此出栈两组数字进行计算,计算结果依然进栈,反复此操作。最后栈底部最后一个元素就是该表达式的运算结果。
#include stdio.h
int mylength(char s[])
{
int i;
for(i=0;s[i]!='\0';i++);
return i;
}
void main()
{
char *s="awedfgwttfwdy66t6t63ttdsf";
printf("Length: %d\n",mylength(s));
}
思路:因为字符串都是以'\0'作为结束标志,所以可以从字符串的第一个位置开始遍历,直到出现'\0'停止遍历,并每次下标后移,字符串的长度加1,最后返回字符串长度。
参考代码:
#include "stdio.h"
int strlen(char *s){//求字符串长度函数
int n;
for(n=0;s[n]!='\0';n++);
return n;
}
int main() {
char a[100];
gets(a);
printf("%d\n",strlen(a));
return 0;
}
/*
运行结果:
wqerqew
7
*/