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

字符串拆分有关问题

2012-09-01 
字符串拆分问题想做这样一项工作,输入是一个字符串,该字符串里可能含数字也可能不含。如果不包含数字,则直

字符串拆分问题
想做这样一项工作,输入是一个字符串,该字符串里可能含数字也可能不含。
如果不包含数字,则直接输出这个字符串。
如果包含数字(数字个数不定),则用指定字符替换数字,并输出数字,例如abc18!@3,数字用*代替(假设字符串中不包含*),则输出abc*!@*,并输出第一个数字18和第二个数字3(不是输出1和8和3)。
有没有好的算法?

[解决办法]
一次遍历就行了
遇到数字就输出*,并保存其位置, 后面跟着的数字忽略并保存个数。

这样输出就替换完了,
然后再由保存的数据,输出数字。


[解决办法]
这个问题 还是用C语言的printf、scanf系列比较容易实现

C/C++ code
#include <stdio.h>#include <string.h>int main(){    char szStr[256] = "";    printf( "输入字符串:" );    scanf( "%s", szStr );    printf( "\n" );        char *p = szStr;    int nVal[32] = {0}; //数字列表    int nCnt = 0;       //数字总计数    char szTmp[128] = "";   //临时字符串变量    while(1)    {        //如果成功读取到数字,则输出*号        if( *p && sscanf( p, "%d", nVal + nCnt ) )        {            ++nCnt;            sscanf( p, "%[0-9]", szTmp );            p += strlen( szTmp );            printf( "*" );        }        //读取字符串        sscanf( p, "%[^0-9]", szTmp );        int nLen =  strlen( szTmp );        //跳出循环条件        if ( nLen == 0 || *p=='\0' || *p == '\n' ) break;        p += nLen;        //输出临时字符串        printf( "%s", szTmp );    }    printf( "\n" );        //输出数字    for( int i = 0; i < nCnt; ++i )        printf( "%d, ", nVal[i] );    printf( "\n" );    return 0;}
[解决办法]
C/C++ code
#include<iostream>using namespace std;int main(){    char c[100];    gets(c);    int i=0;    cout<<"数字:"<<endl;    while(c[i]!=0)    {        if(c[i]>='0'&&c[i]<='9')        {            cout<<c[i]<<" ";            c[i]='*';        }        i++;    }    cout<<endl<<"改后的字符串:"<<endl;    puts(c);    return 0;} 

热点排行