您的位置:首页 > 其它

笔试题目1-数字字符串排序

2013-10-10 14:20 369 查看
#include <iostream>

#include <stdio.h>

#include <cstring>

#include <string>

using namespace std;

int strToInt(char*pBegin,char*pEnd);

int* str2num(char* str);

void paixu(int *ptr);

int strToInt(char*pBegin,char*pEnd)

{

   char* p = pBegin;

   int sum = 0;

   int neg = 1;

   if(*p == '+')

   {

     ++p;

   }

   else if(*p =='-')

   {

     neg = -1;

     ++p;

   }

   else if(p > pEnd)

   {

      return -1;

   }

   do

   {

     if(*p<'0' || *p >'9')

       {

         return -1;

       }

     sum = sum*10 +*p-'0';

   }while(p++ != pEnd);

   sum *= neg;

   return sum;

}

int* str2num(  char* str)

{

  if(str == NULL)

    return NULL;

  int numData = 0;

  char* pBegin = str;

  char* pEnd = str;

  printf("2");

  while(*pEnd !='\0')

  {

    if(*pEnd ==',')

    ++numData;

    ++pEnd;

  }

  printf("numData is:%d\n",numData);

  pEnd =str;

  int arr[numData];

  int i = 0;

   numData++;

   printf("4");

  while(*pBegin !='\0')

  {

    if(*pBegin ==',')

    {

       pBegin++;

       pEnd++;

    }

    else if(*pEnd ==','|| *pEnd =='\0')

    {

        int num = strToInt(pBegin,--pEnd);

        if(i!=numData)

        {

          arr[i] = num;

          ++i;

        }

        printf("num is: %d\n",num);

        pBegin = ++pEnd;

    }

    else

    {

       pEnd++;

    }

 }

  arr[i]='\0';

  int* intPtr = arr;

printf("5");

 int j;

//for(j=0;j<i;j++)

  while(*intPtr !='\0')

    printf("arr数组元素为:%d\t",*intPtr++);

  printf("\n");

  intPtr = arr;

return intPtr;

}

void paixu(int* ptr)

{

    while(*ptr !='\0')

        printf("ptr is:%d\n",*ptr++);

    int i,j,min,temp;

    int len = 0;

    int* p = ptr;

    do

      {

        printf("bupt数组元素为:%d\t",*p);

        ++p;

        len++;

     } while(*p !='\0');

    printf("len is:%d\n",len);

    for(i=0;i<len;i++)

    {

      min = i;

      for(j=i+1;j<len;j++)

      {

          if(ptr[j]<ptr[min])

              min = j;

      }

      if(i!=min)

      {

          temp = ptr[min];

          ptr[min] = ptr[i];

          ptr[i] = temp;

      }

    }

    for(i=0;i<len;i++)

        printf("数组为:%d\t",ptr[i]);

}

int main()

{

  printf("main");

  char* str =(char*)"22,11,5,10,99";

  int* ptr = NULL;

  int len = 0,i,j,min,temp;

  ptr = str2num(str);

   int* q = ptr;

   while(*q !='\0')

   {

       printf("ptr is:%d\n",*q++);

      len++;

   }

   //调用排序

   for(i=0;i<len;i++)

   {

     min = i;

     for(j=i+1;j<len;j++)

     {

         if(ptr[j]<ptr[min])

             min = j;

     }

     if(i!=min)

     {

         temp = ptr[min];

         ptr[min] = ptr[i];

         ptr[i] = temp;

     }

   }

   for(i=0;i<len;i++)

       printf("数组为:%d\t",ptr[i]);

  return 0;

}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: