目前有一台机器因为故障,导致字符0显示异常为字符*,现在需要设置成绩,将字符*转成字符0;并将多余的0清除。
例如:输入,**.1** ;对于的输出:0.1
设置思路,1.输入一串字符,先将字符*全部转换成 字符0;
2.将正常的数字字符串当中,整数部分多余的字符0清除
3.将小数部分多余的0清除。
上代码:
/*************************************************************************
> File Name: number1.c
> Author: Clam
> Mail: 1223113455@qq.com
> Created Time: 2016年06月05日 星期日 10时05分50秒
************************************************************************/
> File Name: number1.c
> Author: Clam
> Mail: 1223113455@qq.com
> Created Time: 2016年06月05日 星期日 10时05分50秒
************************************************************************/
#include<stdio.h>
#include <string.h>
void fun(char* buff,int length);
void changeToZero(char* buff,int length);
void cleanIntZero(char* buff,int length);
void cleanPointZero(char* buff,int length);
int main()
{
char buff[1024] = "";
int length = 0;//代表字符串有效长度
// int pos = 0;//代表小数点的位置;
scanf("%s",buff);
length =(int) strlen(buff);//size_t usigned int
changeToZero(buff,length);
cleanIntZero(buff,length);
length = strlen(buff);//length长度会发生变化
cleanPointZero(buff,length);
printf("%s\n",buff);
return 0;
}
void cleanPointZero(char* buff,int length)
{
int pos = 0 ;//小数点位置
int num = 0 ,temp = 0;//有数字出现的位置
int i = 0;
for(i = 0;i < length ;i++)
{
if(buff[i] == '.')
{
pos = i;
}
}
for(i = pos;i < length ;i++)
{
if(buff[i] > '0')
{
num = i;
}
}
if(num == 0)
{
buff[pos] = '\0';
return ;
}
buff[num+1] = '\0';
return ;
}
//目前只考虑小数点中在中间的情况
void cleanIntZero(char *buff,int length)
{
int temp = 0;
int pos = 0;//代表小数点出现的位置;
int i = 0;
temp = length;
for(i = 0;i < length ;i++)
{
if(buff[i] == '.')
pos = i;
}
#include <string.h>
void fun(char* buff,int length);
void changeToZero(char* buff,int length);
void cleanIntZero(char* buff,int length);
void cleanPointZero(char* buff,int length);
int main()
{
char buff[1024] = "";
int length = 0;//代表字符串有效长度
// int pos = 0;//代表小数点的位置;
scanf("%s",buff);
length =(int) strlen(buff);//size_t usigned int
changeToZero(buff,length);
cleanIntZero(buff,length);
length = strlen(buff);//length长度会发生变化
cleanPointZero(buff,length);
printf("%s\n",buff);
return 0;
}
void cleanPointZero(char* buff,int length)
{
int pos = 0 ;//小数点位置
int num = 0 ,temp = 0;//有数字出现的位置
int i = 0;
for(i = 0;i < length ;i++)
{
if(buff[i] == '.')
{
pos = i;
}
}
for(i = pos;i < length ;i++)
{
if(buff[i] > '0')
{
num = i;
}
}
if(num == 0)
{
buff[pos] = '\0';
return ;
}
buff[num+1] = '\0';
return ;
}
//目前只考虑小数点中在中间的情况
void cleanIntZero(char *buff,int length)
{
int temp = 0;
int pos = 0;//代表小数点出现的位置;
int i = 0;
temp = length;
for(i = 0;i < length ;i++)
{
if(buff[i] == '.')
pos = i;
}
for(i = 0; i< pos-1 ;i++)//之关注一共要比较的次数
{
if(buff[0] > '0')//只关注第一为是否为0 不能书buff[i];
{
break;
}
else{
fun(buff,length);
buff[length-1] = '\0';//这里会影响外循环
length = strlen(buff);
}
}
}
void fun(char* buff,int length)
{
int i = 0;
for(i = 0 ; i< length-1 ; i++)
{
buff[i] = buff[i+1];
}
}
void changeToZero(char* buff,int length)
{
int i = 0;
for(i=0 ; i<length ; i++)
{
if(buff[i] == '*')
{
buff[i] = '0';
}
}
}
{
if(buff[0] > '0')//只关注第一为是否为0 不能书buff[i];
{
break;
}
else{
fun(buff,length);
buff[length-1] = '\0';//这里会影响外循环
length = strlen(buff);
}
}
}
void fun(char* buff,int length)
{
int i = 0;
for(i = 0 ; i< length-1 ; i++)
{
buff[i] = buff[i+1];
}
}
void changeToZero(char* buff,int length)
{
int i = 0;
for(i=0 ; i<length ; i++)
{
if(buff[i] == '*')
{
buff[i] = '0';
}
}
}