Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
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 !
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

  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ông cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

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