4 Câu hỏi: Chính xác thì chuỗi dòng làm gì?

câu hỏi được tạo ra tại Tue, Apr 2, 2019 12:00 AM

Tôi đang cố gắng học C ++ từ hôm qua và tôi đang sử dụng tài liệu này: http://www.cplusplus.com/files /guide.pdf (trang 32). Tôi tìm thấy một mã trong tài liệu và tôi đã chạy nó. Tôi đã thử nhập 5,5 đô la cho giá và một số nguyên cho số lượng và đầu ra là 0. Tôi đã thử nhập 5.5 và 6 và đầu ra là chính xác.

 49 310

Câu hỏi: Chính xác thì lệnh bí ẩn làm gì? Trích dẫn từ tài liệu:

  

"Trong ví dụ này, chúng tôi có được các giá trị số từ đầu vào tiêu chuẩn   gián tiếp Thay vì trích xuất các giá trị số trực tiếp từ   đầu vào tiêu chuẩn, chúng tôi nhận các dòng từ đầu vào tiêu chuẩn (cin) vào một   đối tượng chuỗi (mystr), và sau đó chúng tôi trích xuất các giá trị nguyên từ   chuỗi này thành một biến kiểu int (số lượng). "

Ấn tượng của tôi là hàm sẽ lấy phần không thể tách rời của chuỗi và sử dụng nó làm đầu vào.

(Tôi không biết chính xác cách đặt câu hỏi ở đây. Tôi cũng mới biết về lập trình) Cảm ơn bạn.

    
88
  1. Ví dụ này hơi lạ, tôi chưa bao giờ thấy 49 310 được sử dụng theo cách đó. Tôi thường tải dòng, chuyển đổi nó và sau đó trích xuất theo từng phần, tuy nhiên điều này rõ ràng có ít lợi thế ở đây vì 49 310 một luồng đầu vào đã ... Vì vậy, 49 310 sẽ đơn giản hơn rất nhiều. Đó sẽ là một lý do chính đáng KHÔNG để sử dụng các hướng dẫn của cplusplus.com.
    2013-12-15 12: 32: 53Z
  2. Hài hước rằng hướng dẫn đó là lần đầu tiên tôi tiếp xúc với C ++. Nhìn lại, nó khá nghèo nàn và không đầy đủ. Thay vào đó, tôi đề xuất một sách hay thay vào đó.
    2013-12-15 12: 37: 59Z
  3. @ BartekBanachewicz Có lẽ họ chỉ cần đưa ra ví dụ để cho thấy 49 310 hoạt động như thế nào. Nó là một thứ kỳ quái thậm chí có thể là xấu =) Nhưng nó cho thấy bạn có thể coi chuỗi là một luồng.
    2013-12-15 12: 39: 03Z
  4. Nếu đó không phải là phần giới thiệu về các ứng dụng nâng cao hơn của 49 310 thì đó chắc chắn là một ví dụ sai. Và ngay cả khi nó là như vậy thì nó cũng nên được viết khác.
    2013-12-15 12: 45: 30Z
  5. . >
    2013-12-15 22: 40: 11Z
4 Câu trả lời                              4                         

Đôi khi, rất thuận tiện khi sử dụng chuỗi dòng để chuyển đổi giữa các chuỗi và các loại số khác. Việc sử dụng 49 310 tương tự như việc sử dụng 49 310, vì vậy nó không phải là gánh nặng để tìm hiểu.

Chuỗi dòng có thể được sử dụng cho cả đọc chuỗi và ghi dữ liệu thành chuỗi. Nó chủ yếu hoạt động với bộ đệm chuỗi, nhưng không có kênh I /O thực.

Các hàm thành viên cơ bản của lớp chuỗi là

  • 49 310, trả về nội dung của bộ đệm theo kiểu chuỗi.

  • 49 310, đặt nội dung của bộ đệm thành đối số chuỗi.

Dưới đây là ví dụ về cách sử dụng luồng chuỗi.

 49 310

Kết quả là 49 310.

49 310 ít nhiều có cùng cách sử dụng.

Để tóm tắt, chuỗi dòng là một cách thuận tiện để thao tác các chuỗi như một thiết bị I /O độc lập .

FYI, mối quan hệ thừa kế giữa các lớp là:

các lớp luồng chuỗi

    
151
2018-03-15 15: 55: 30Z

Để trả lời câu hỏi. Về cơ bản, 49 310 cho phép bạn xử lý một đối tượng 49 310 như 49 310 và sử dụng tất cả các hàm 49 310 và toán tử trên nó.

Tôi thấy nó được sử dụng chủ yếu cho độ tốt đầu ra /đầu vào được định dạng.

Một ví dụ điển hình là 49 310 triển khai chuyển đổi số thành đối tượng truyền phát.

Ví dụ có thể có:

 49 310

Có thể nó hơi phức tạp nhưng nó khá phức tạp. Bạn tạo 49 310 đối tượng 49 310, sửa đổi các cờ của nó, đặt một số vào đó với 49 310 và trích xuất nó thông qua 49 310. Tôi đoán rằng 49 310 có thể được sử dụng.

Cũng trong ví dụ này, bộ đệm 49 310 bị ẩn và không được sử dụng rõ ràng. Nhưng nó sẽ là quá dài của một bài viết để viết về mọi khía cạnh có thể và trường hợp sử dụng.

Lưu ý: Tôi có thể đã đánh cắp nó từ một người nào đó trên SO và được tinh chỉnh, nhưng tôi không có tác giả gốc nào lưu ý.

    
18
2013-12-15 12: 52: 20Z
  1. Lưu ý: việc sử dụng 49 310 là không cần thiết, người ta có thể viết 49 310.
    2013-12-15 12: 57: 38Z
  2. @ MatthieuM. Tôi nghĩ rằng tôi đã không chắc chắn nếu RVO sẽ khởi động nếu nó được viết như vậy hoặc nếu đối tượng được trả lại bởi ss.str () sẽ sống sót sau điểm thoát. Bằng cách này, tôi biết tôi đang tạo một bản sao và RVO sẽ hoạt động. Nhưng bạn có lẽ đúng nhất.
    2013-12-15 13: 03: 59Z
  3. Trên thực tế, có 2 hình thức RVO: URVO (đối với không tên, đó là tạm thời) và NRVO (được đặt tên); hầu hết các trình biên dịch triển khai RVO, nhưng một số trình biên dịch chỉ giới hạn URVO (tùy thuộc vào tùy chọn xây dựng). Tuy nhiên, nói chung, có rất nhiều yếu tố khác cần tính đến, vì vậy bạn chỉ nên viết mã sạch nhất có thể và đừng quá lo lắng về việc RVO sẽ khởi động.
    2013-12-15 13: 24: 46Z
  4. NRVO là phổ biến (như URVO) tuy nhiên đó không phải là vấn đề do các nhà xây dựng di chuyển.
    2013-12-15 13: 29: 01Z

Từ C ++ Primer :

  

Loại i chuỗi dòng đọc một chuỗi , xâu chuỗi viết một chuỗi chuỗi dòng strong> đọc và ghi chuỗi .

Tôi bắt gặp một số trường hợp vừa tiện lợi vừa ngắn gọn để sử dụng chuỗi dòng .

trường hợp 1

Đó là từ một trong những giải pháp cho vấn đề về leetcode này . Nó cho thấy một trường hợp rất phù hợp trong đó việc sử dụng chuỗi dòng là hiệu quả và ngắn gọn.

Giả sử 49 310 và 49 310 là các số phức được biểu thị ở định dạng chuỗi, chúng tôi muốn nhận được kết quả của phép nhân 49 310 và 49 310 ở định dạng chuỗi. Mã như sau:

 49 310

trường hợp 2

Nó cũng xuất phát từ một vấn đề về mã hóa yêu cầu bạn đơn giản hóa đường dẫn đã cho chuỗi, một trong những giải pháp sử dụng chuỗi ký tự là thanh lịch nhất Tôi đã thấy:

 49 310

Nếu không sử dụng chuỗi ký tự, sẽ rất khó để viết mã ngắn gọn như vậy.

    
16
2017-09-18 07: 21: 46Z

Bạn đã nhập một chữ số và chữ int, được phân cách trống trong 49 310.

Sau đó, bạn đã cố gắng chuyển đổi mã thông báo đầu tiên (được phân tách trống) thành 49 310.

Mã thông báo đầu tiên là RS không chuyển đổi thành 49 310, để lại số 0 cho myprice và tất cả chúng ta đều biết số lần nào mang lại lợi nhuận gấp 0 lần.

Khi bạn chỉ nhập giá trị int, sethời gian, mọi thứ làm việc như bạn mong đợi

Chính RS giả đã khiến mã của bạn bị lỗi.

    
2
2015-08-11 09: 05: 13Z
// stringstreams
#include <iostream> 
#include <string> 
#include <sstream> 

using namespace std; 

int main () 
{ 
  string mystr; 
  float price = 0; 
  int quantity = 0; 

  cout << "Enter price: "; 
  getline (cin,mystr); 
  stringstream(mystr) >> price; 
  cout << "Enter quantity: "; 
  getline (cin,mystr); 
  stringstream(mystr) >> quantity; 
  cout << "Total price: " << price*quantity << endl; 
  return 0; 
}
nguồn đặt đây