字符串处理
给你一个字符串。
如果是小数,就将数末尾的0清除
如,给你一个字符串 12.345000
因为有一个小数点,所以,是小数,就把末尾的0清除
得到字符串 12.345
如果给你12345000,因为没有小数点,所以,不是小数,不处理,得到字符串12345000
我写了一写,自我感觉很啰嗦很恶心。
求优美高效代码。。。。
[解决办法]
#include<stdio.h>#include<string.h>#include<stdlib.h>char *fun(char *s, char ch);int main(){ char s[50] = "12.00100"; printf("s=%s\n", s); fun(s, '.'); printf("s=%s\n", s); return 0;}char *fun(char *s, char ch){ char *p, *q; int len = strlen(s), i; p = strchr(s, ch); if(p == NULL) { return s; } if(*(s+len-1) != '0') { return s; } for(i = len-1; s[i] != *p && s[i] == '0'; i--) { s[i] = '\0'; } if(s[i] == *p) { s[i] = '\0'; } return s;}
[解决办法]
转换一下数据类型吧,atof转换成double,然后在sprintf得到字符串即可:
示例:
函数名称: atof函数原型: double atof(char *str)函数功能: 将字符串转换成一个双精度数值函数返回: 转换后的数值参数说明: str-待转换浮点型数的字符串所属文件: <stdlib.h>#include <stdlib.h>#include <stdio.h>int main(){ float f; char *str="12345.67"; f=atof(str); printf("string=%s float=%f",str,f); return 0;}函数名称: sprintf函数原型: int sprintf (char *buffer,const char *format,… )函数功能: buffer写入的缓冲区函数返回: 写入的字符数(不包括终止符)参数说明:所属文件: <stdio.h>#include <stdio.h>#include <math.h>int main(){ char buffer[80]; sprintf(buffer,"An approximation of Pi is %f",M_PI); puts(buffer); return 0;}
[解决办法]
也写了一个,但不知道效率怎么样:
#include<stdio.h>#include<stdlib.h>char *func(char *s){ char *pslow = s; char *pfast; if (s == NULL) return NULL; while(*pslow) { if (*pslow == '.') break; pslow++; } pfast = pslow + 1; if (*pslow == 0) return s; else { while(*pslow) { char *pjudge = pslow; while(*pjudge++ == '0') { if (!*pjudge) { (*(pslow - 1 ) == '.') ? (*(pslow - 1 ) = 0) : (*pslow = 0);//必要时去掉. return s; } } *++pslow = *pfast++; } return s; }}int main(){ int i; char array[][100] = { "1226", "1226.00", "1226.00123", "1226.0012300", "1226.001000101", "1226.101000101000", "1226.00000000000000", }; for (i = 0; i < sizeof (array)/sizeof (array[0]); i++) printf("%s\n", func(array[i])); system("pause"); return 0;}
[解决办法]
也写了一个,但不知道效率怎么样:
#include<stdio.h>#include<stdlib.h>char *func(char *s){ char *pslow = s; char *pfast; if (s == NULL) return NULL; while(*pslow) { if (*pslow == '.') break; pslow++; } if (*pslow == 0) return s; else { pfast = pslow + 1; while(*pslow) { char *pjudge = pslow; while(*pjudge++ == '0') { if (!*pjudge) { (*(pslow - 1 ) == '.') ? (*(pslow - 1 ) = 0) : (*pslow = 0);//必要时去掉. return s; } } *++pslow = *pfast++; } return s; }}int main(){ int i; char array[][100] = { "1226", "1226.00", "1226.00123", "1226.0012300", "1226.001000101", "1226.101000101000", "1226.00000000000000", }; for (i = 0; i < sizeof (array)/sizeof (array[0]); i++) printf("%s\n", func(array[i])); system("pause"); return 0;}
[解决办法]
#include "stdafx.h"#include <stdlib.h>void TranslatForm(TCHAR* pBuf, int nLen){ TCHAR* pFlag = _tcschr(pBuf, _T('.')); if(NULL != pFlag) { pFlag = _tcschr(pFlag, _T('0')); pBuf[pFlag-pBuf] = _T('\0'); } _tprintf(_T("%s\r\n"), pBuf);}int _tmain(int argc, _TCHAR* argv[]){ TCHAR buf1[] = _T("12.3450000"); TCHAR buf2[] = _T("123450000"); TranslatForm(buf1, _tcslen(buf1)); TranslatForm(buf2, _tcslen(buf2)); return 0;}