從字串中提取數字並排序輸出

2022-03-05 17:46:54 字數 3263 閱讀 4163

從字串中提取數字並排序輸出

看到別人的討論貼,也做了下。題目很簡單,可以直接用標準庫函式,也可以自已造輪子。標準庫中能用到的只有:

atoi / strtol

系列,顯然得用

strtol

(有些庫

atoi

就是用strtol

實現的)

在用strtol

前,先要對不安全的

strtol

封裝下。

intstr2i(const

char

str,

const

char*&next,

intbase=

10)

可採用兩種演算法:

1 先忽略空白字元,然後直接呼叫str2i (**solve1)

2 先找到合法數字的第乙個字元,再呼叫str2i(**solve2)

當然也可以自行實現

strtol

(**:

solve3

和solve4

)。view code

//#include 

<

iostream

>

#include 

<

algorithm

>

#include 

<

iterator

>

#include 

<

deque

>

#include 

<

limits

>

#include 

<

cstdlib

>

using

std::cout;

intstr2i(

const

char

str, 

const

char*&

next, 

intbase=10

)void

solve1(

const

char

*str)

errno =0

;int

value 

=str2i(p, next);  

if(errno !=0

) if

(next 

>

p) ++p;}

std::sort(dq.begin(), dq.end());

std::copy(dq.begin(), dq.end(), std::ostream_iterator

<

int>

(cout,""

)); 

cout 

<<

"\n\n";

}void

solve2(

const

char

*str)

errno =0

;int

value 

=str2i(p, next);

if(errno !=0

) if

(next 

>

p) }

std::sort(dq.begin(), dq.end());

std::copy(dq.begin(), dq.end(), std::ostream_iterator

<

int>

(std::cout,""

)); 

cout 

<<

"\n\n";

}void

solve3(

const

char

*str)

elseif(

*p =='

+') int

value =0

;bool

range_error 

=false

;bool

value_read 

=false

;const

char

*old =p;

for( ; 

*p; 

++p) 

value 

=value *10

+tmp;

value_read 

=true;}

if(range_error)  

if(value_read) if(

*p ==0

) break

; ++

p;    

}std::sort(dq.begin(), dq.end());

std::copy(dq.begin(), dq.end(), std::ostream_iterator

<

int>

(std::cout,""

)); 

cout 

<<

"\n\n";

}void

solve4(

const

char

*str)

const

char

*old =p;

intvalue =*

p++-'

0';bool

range_error 

=false

;for

( ; 

*p; 

++p) 

value 

=value *10

+tmp;}if

(range_error)  

if(negative) 

dq.push_back(value);    if(

*p ==0

) break;++

p; }

std::sort(dq.begin(), dq.end());

std::copy(dq.begin(), dq.end(), std::ostream_iterator

<

int>

(std::cout,""

)); 

cout 

<<

"\n\n";

}int

main()

從字串中提取數字

下面程式將字串中的連續數字提取出來,並存放到一維陣列中。比如說乙個字串 a284twx234 je3432 把 284 234 3432 這3個連續數字提取出來,分別存放到a 0 a 1 a 2 中。include include include int main buf i 0 sscanf bu...

sqlserver從字串中提取數字

可以通過寫自定義函式實現,以下提供兩種思路來解決 方法一 乙個乙個找出來 create function dbo fun getnumpart str nvarchar max returns nvarchar max asbegin declare start int declare end in...

從字串中提取數字 字元

import restring hello 16天11板的 number re.findall r d string 提取所有整數 print 所有數字 number number re.findall r 天 d string 提取指定字元後數字 print 指定字元後 number number...