一道中兴笔试题
要求是抠出给定字符串中的所有数字然后排序输入
做法如下:
#include <cstdlib>
#include <iostream>
#include <string.h>
#include <ctype.h>
#include <algorithm>
#include <iterator>
using namespace std;
void output(char* str,int len)
{
if(str == NULL || len <= 0)
return;
int* data = (int*)malloc(len);
char* tmp = (char*)malloc(len+1);
memset(data,0,len);
memset(tmp,0,sizeof(char)*len);
int index = 0;
int i = 0;
int j = 0;
int flag = isdigit(str[0]);
while(1)
{
if(i==len || i+j == len+1)
break;
if(isdigit(str[i+j]) == 0 && flag == 0)
{
i=i+j+1;
j=0;
flag = isdigit(str[i+j]);
}
else if(isdigit(str[i+j]) == 0 && flag != 0)
{
memset(tmp,0,sizeof(char)*(len+1));
strncpy(tmp,str+i,j);
data[index++] = atoi(tmp);
flag = 0;
}
else
{
j++;
}
}
std::sort(data,data+index);
std::copy(data,data+index,std::ostream_iterator<int>(std::cout," "));
free(tmp);
free(data);
}
int main(int argc,char *argv[])
{
char input[] = "33k&99+r5sw1f10gd4vc511gc3";
output(input,strlen(input));
system("PAUSE");
return EXIT_SUCCESS;
}
严格说来不应该使用stl中的函数和模板但是为了简便起见还是这么写吧
另外一直我一直己写strcpyn函数用于复制给定字符串没发现库中有一个类型的strncpy函数