字符串拆分问题
想做这样一项工作,输入是一个字符串,该字符串里可能含数字也可能不含。
如果不包含数字,则直接输出这个字符串。
如果包含数字(数字个数不定),则用指定字符替换数字,并输出数字,例如abc18!@3,数字用*代替(假设字符串中不包含*),则输出abc*!@*,并输出第一个数字18和第二个数字3(不是输出1和8和3)。
有没有好的算法?
[解决办法]
一次遍历就行了
遇到数字就输出*,并保存其位置, 后面跟着的数字忽略并保存个数。
这样输出就替换完了,
然后再由保存的数据,输出数字。
[解决办法]
这个问题 还是用C语言的printf、scanf系列比较容易实现
#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;}
[解决办法]
#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;}