Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: Lập trình C++ | Cách đổi chuỗi sang số và ngược lại !

  1. #1
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Mặc định Lập trình C++ | Cách đổi chuỗi sang số và ngược lại !

    Chúng ta sẽ sử dụng 2 thằng ostringstream và istringstream và thao tác rất đơn giản như sau :
    Convert chuỗi sang số :
    convert.h
    PHP Code:
    #include <iostream>
     #include <sstream>
     #include <string>
     #include <stdexcept>
     
     
    class BadConversion : public std::runtime_error {
     public:
       
    BadConversion(const std::strings)
         : 
    std::runtime_error(s)
         { }
     };
     
     
    inline std::string stringify(double x)
     {
       
    std::ostringstream o;
       if (!(
    << x))
         throw 
    BadConversion("stringify(double)");
       return 
    o.str();
     } 
    Trong ví dụ trên hàm stringify của chúng ta nhận 1 đối là x và định nghĩa toán tử xuất <<. Câu lệnh if sẽ bảo đảm rằng sự chuyển đổi thành công.
    Thằng o.str() trả về 1 chuỗi sẽ chứa bất cứ cái gì trong stream được nhập vào, trong trường hợp này là chuỗi của giá trị x.
    Driver example:
    PHP Code:
    #include "convert.h"
     
     
    void myCode()
     {
       
    double x = ...;
       ...
       
    std::string s "the value is " stringify(x);
       ...
     } 
    Convert số sang chuỗi :
    Cũng tương tự như trên nhưng lúc này ta sẽ dùng istringstream
    PHP Code:
    #include <iostream>
     #include <sstream>
     #include <string>
     #include <stdexcept>
     
     
    class BadConversion : public std::runtime_error {
     public:
       
    BadConversion(const std::strings)
         : 
    std::runtime_error(s)
         { }
     };
     
     
    inline double convertToDouble(const std::strings)
     {
       
    std::istringstream i(s);
       
    double x;
       if (!(
    >> x))
         throw 
    BadConversion("convertToDouble(\"" "\")");
       return 
    x;
     } 
    Driver example :
    PHP Code:
     #include "convert.h"
     
     
    void myCode()
     {
       
    std::string s = ...a string representation of a number...;
       ...
       
    double x convertToDouble(s);
       ...
     } 
    Nếu kĩ hơn và để tăng performance ta có thể thêm thắt 1 chút muối tiêu vào như sau :
    PHP Code:
    inline double convertToDouble(const std::strings,
                                   
    bool failIfLeftoverChars true)
     {
       
    std::istringstream i(s);
       
    double x;
       
    char c;
       if (!(
    >> x) || (failIfLeftoverChars && i.get(c)))
         throw 
    BadConversion("convertToDouble(\"" "\")");
       return 
    x;
     } 
    Thằng bool failIfLeftoverChars sẽ kiểm tra xem có còn kí tự nào sót lại trên bộ đếm hay không.
    Thân !

  2. #2
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Nhưng code ở trên vẫn còn hạn chế vì chỉ sử dụng được với 1 kiểu dữ liệu nhất định, vậy làm sao ta có thể dùng được với mọi kiểu dữ liễu. Template sẽ là giải pháp :
    PHP Code:
    #include <iostream>
     #include <sstream>
     #include <string>
     #include <typeinfo>
     #include <stdexcept>
     
     
    class BadConversion : public std::runtime_error {
     public:
       
    BadConversion(const std::strings)
         : 
    std::runtime_error(s)
         { }
     };
     
     
    template<typename T>
     
    inline std::string stringify(const Tx)
     {
       
    std::ostringstream o;
       if (!(
    << x))
         throw 
    BadConversion(std::string("stringify(")
                             + 
    typeid(x).name() + ")");
       return 
    o.str();
     } 
    Driver example :
    PHP Code:
    #include "convert.h"
     
     
    void myCode()
     {
       
    Foo x;
       ...
       
    std::string s "this is a Foo: " stringify(x);
       ...
     } 
    Tượng tự với kênh nhập vào cin, ta viết lại hàm convert như sau:
    PHP Code:
     template<typename T>
     
    inline void convert(const std::stringsTx,
                         
    bool failIfLeftoverChars true)
     {
       
    std::istringstream i(s);
       
    char c;
       if (!(
    >> x) || (failIfLeftoverChars && i.get(c)))
         throw 
    BadConversion(s);
     } 
    Driver example
    PHP Code:
    #include "convert.h"
     
     
    void myCode()
     {
       
    std::string s = ...a string representation of a Foo...;
       ...
       
    Foo x;
       
    convert(sx);
       ...
       ...
    code that uses x...
     } 
    Và nếu chúng ta muốn có kiểu trả về để làm gì đó thì ta cũng viết lại 1 cách đơn giản như sau :
    PHP Code:
    template<typename T>
     
    inline T convertTo(const std::strings,
                        
    bool failIfLeftoverChars true)
     {
       
    T x;
       
    convert(sxfailIfLeftoverChars);
       return 
    x;
     } 
    Driver example :
    PHP Code:
    #include "convert.h"
     
     
    void myCode()
     {
       
    std::string a = ...string representation of an int...;
       
    std::string b = ...string representation of an int...;
       ...
       if (
    convertTo<int>(a) < convertTo<int>(b))
         ...;
     } 

Các đề tài tương tự

  1. làm sao chuyển chuổi tiền tệ sang chuỗi số
    Gửi bởi thuan trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 7
    Bài viết cuối: 14-01-2012, 07:48 PM
  2. Chuyển chuỗi tiếng việt sang chuỗi số và ngược lại
    Gửi bởi saonam trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 5
    Bài viết cuối: 18-06-2011, 07:28 AM
  3. Bài tập C++ cho chuỗi s. Đổi chuối s sang chữ thường, ký tự đầu của mỗi từ sang chữ in
    Gửi bởi quan_pc trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 14-04-2011, 08:19 PM
  4. Gấp Gấp nè:Đổi từ kiểu kí tự sang kiểu chuỗi
    Gửi bởi khoadangnguyen trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 03-12-2007, 08:37 PM
  5. Lập trình C++ | Đổi từ số sang chuỗi | Đổi từ chuỗi sang số
    Gửi bởi Kevin Hoang trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 06-06-2007, 08:23 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn