從字串中提取數字並排序輸出
看到別人的討論貼,也做了下。題目很簡單,可以直接用標準庫函式,也可以自已造輪子。標準庫中能用到的只有:
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...