注释一段代码 稍微详细点(很简单的) (c/c++)
#include<stdio.h>#include<string.h>voidA(char*s){intlen=strlen(s);char*p=s+len-1;if(s...
#include <stdio.h>
#include <string.h>
void A(char *s)
{
int len = strlen(s);
char *p = s + len - 1;
if (strchr(s, '.'))
while (*p == '0') *p-- = 0;
if (*p == '.') *p = 0;
}
int main(void)
{
char *pa, *pb;
char a[100024], b[100024];
while (scanf("%s%s", &a, &b) != EOF)
{
pa = a; pb = b;
while (*pa == '0') pa++;
while (*pb == '0') pb++;
A(pa); A(pb);
puts(strcmp(pa, pb) ? "NO" : "YES");
}
return 0;
}
主要是那个空函数
*p-- = 0;两个减号什么作用?稍微说说 展开
#include <string.h>
void A(char *s)
{
int len = strlen(s);
char *p = s + len - 1;
if (strchr(s, '.'))
while (*p == '0') *p-- = 0;
if (*p == '.') *p = 0;
}
int main(void)
{
char *pa, *pb;
char a[100024], b[100024];
while (scanf("%s%s", &a, &b) != EOF)
{
pa = a; pb = b;
while (*pa == '0') pa++;
while (*pb == '0') pb++;
A(pa); A(pb);
puts(strcmp(pa, pb) ? "NO" : "YES");
}
return 0;
}
主要是那个空函数
*p-- = 0;两个减号什么作用?稍微说说 展开
3个回答
展开全部
看了你的代码,应该是杭电OJ上的2054这道题目,其实这倒题目没什么其他特别的地方,只需要注意几组特殊数据:
0011 11
0.000100 0.0001
99.00 99
下面解释下上面的代码:
#include <stdio.h>
#include <string.h>
void A(char *s)
{
int len = strlen(s);
char *p = s + len - 1;
if (strchr(s, '.')) //如果字符串中存在小数点
{
while (*p == '0') *p-- = 0; //如果*p是0,则将p指向的字符赋为结束 符,并将p前移一位。即消去后导0
if (*p == '.') *p = 0; 如果全是0,即只剩下小数点的话,则输入数据位0
}
}
int main(void)
{
char *pa, *pb;
char a[100024], b[100024];
while (scanf("%s%s", &a, &b) != EOF)
{
pa = a; pb = b;
while (*pa == '0') pa++; //消去输入字符串a的前导0
while (*pb == '0') pb++; //消去输入字符串b的前导0
A(pa); A(pb);
puts(strcmp(pa, pb) ? "NO" : "YES");
}
return 0;
0011 11
0.000100 0.0001
99.00 99
下面解释下上面的代码:
#include <stdio.h>
#include <string.h>
void A(char *s)
{
int len = strlen(s);
char *p = s + len - 1;
if (strchr(s, '.')) //如果字符串中存在小数点
{
while (*p == '0') *p-- = 0; //如果*p是0,则将p指向的字符赋为结束 符,并将p前移一位。即消去后导0
if (*p == '.') *p = 0; 如果全是0,即只剩下小数点的话,则输入数据位0
}
}
int main(void)
{
char *pa, *pb;
char a[100024], b[100024];
while (scanf("%s%s", &a, &b) != EOF)
{
pa = a; pb = b;
while (*pa == '0') pa++; //消去输入字符串a的前导0
while (*pb == '0') pb++; //消去输入字符串b的前导0
A(pa); A(pb);
puts(strcmp(pa, pb) ? "NO" : "YES");
}
return 0;
展开全部
--号在后边就是先操作再减一,你该去补习基础知识了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
*p-- = 0;这个?
就是把p地址里的值赋成0,然后p=p-1.
--------------------
既然求助了就要答嘛,其实我也不太懂。
刚才写了个程序测了一下,文字上应该没有错。
scanf比较擅长的使我们团的另一个人,他现在不在。
#include <stdio.h>
#include <string.h>
void A(char *s)
{
int len = strlen(s); //记录s串长
char *p = s + len - 1; //p为末端
if (strchr(s, '.')) //如果有小数点
while (*p == '0') //把末尾的0去掉
*p-- = 0;
if (*p == '.') //如果末尾就是小数点
*p = 0; //去掉小数点
}
int main(void)
{
char *pa, *pb;
char a[100024], b[100024];
while (scanf("%s%s", &a, &b) != EOF)//在输入中不存在两个Ctrl+Z时,给a,b赋两个字串
{
pa = a; pb = b; //设定pa,pb
while (*pa == '0') pa++; //去掉a串前的'0'
while (*pb == '0') pb++; //去掉b串前的'0'
A(pa); A(pb); //解决小数的字串不匹配问题
puts(strcmp(pa, pb) ? "NO" : "YES"); //剩下的pa,pb所指的字串比较,输出。
}
return 0;
}
就是把p地址里的值赋成0,然后p=p-1.
--------------------
既然求助了就要答嘛,其实我也不太懂。
刚才写了个程序测了一下,文字上应该没有错。
scanf比较擅长的使我们团的另一个人,他现在不在。
#include <stdio.h>
#include <string.h>
void A(char *s)
{
int len = strlen(s); //记录s串长
char *p = s + len - 1; //p为末端
if (strchr(s, '.')) //如果有小数点
while (*p == '0') //把末尾的0去掉
*p-- = 0;
if (*p == '.') //如果末尾就是小数点
*p = 0; //去掉小数点
}
int main(void)
{
char *pa, *pb;
char a[100024], b[100024];
while (scanf("%s%s", &a, &b) != EOF)//在输入中不存在两个Ctrl+Z时,给a,b赋两个字串
{
pa = a; pb = b; //设定pa,pb
while (*pa == '0') pa++; //去掉a串前的'0'
while (*pb == '0') pb++; //去掉b串前的'0'
A(pa); A(pb); //解决小数的字串不匹配问题
puts(strcmp(pa, pb) ? "NO" : "YES"); //剩下的pa,pb所指的字串比较,输出。
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询