首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

字符串处理,该怎么解决

2012-03-12 
字符串处理给你一个字符串。如果是小数,就将数末尾的0清除如,给你一个字符串 12.345000因为有一个小数点,所

字符串处理
给你一个字符串。

如果是小数,就将数末尾的0清除

如,给你一个字符串 12.345000
因为有一个小数点,所以,是小数,就把末尾的0清除
得到字符串 12.345

如果给你12345000,因为没有小数点,所以,不是小数,不处理,得到字符串12345000

我写了一写,自我感觉很啰嗦很恶心。

求优美高效代码。。。。

[解决办法]

C/C++ code
#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得到字符串即可:

示例:
C/C++ code
函数名称:     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;}
[解决办法]
也写了一个,但不知道效率怎么样:
C/C++ code
#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;}
[解决办法]
也写了一个,但不知道效率怎么样:
C/C++ code
#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;} 


[解决办法]

探讨
C/C++ code

#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, '.');
……

[解决办法]
跟一楼的相比,
我的代码实在是太长了
呵呵
[解决办法]
我也写一个吧:
C/C++ code
#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;} 

热点排行