it-swarm-vi.tech

Làm thế nào để bạn nối một int vào một chuỗi trong C ++?

int i = 4;
string text = "Player ";
cout << (text + i);

Tôi muốn nó in Player 4.

Trên đây rõ ràng là sai nhưng nó cho thấy những gì tôi đang cố gắng làm ở đây. Có một cách dễ dàng để làm điều này hay tôi phải bắt đầu thêm bao gồm mới?

142
Wawa

Với C++ 11, bạn có thể viết:

#include <string>     // to use std::string, std::to_string() and "+" operator acting on strings 

int i = 4;
std::string text = "Player ";
text += std::to_string(i);
223
headmyshoulder

Chà, nếu bạn sử dụng cout, bạn có thể chỉ cần viết số nguyên trực tiếp vào nó, như trong

std::cout << text << i;

Cách C++ để chuyển đổi tất cả các loại đối tượng thành chuỗi là thông qua luồng chuỗi . Nếu bạn không có tiện dụng, chỉ cần tạo một cái.

#include <sstream>

std::ostringstream oss;
oss << text << i;
std::cout << oss.str();

Ngoài ra, bạn chỉ có thể chuyển đổi số nguyên và nối nó vào chuỗi.

oss << i;
text += oss.str();

Cuối cùng, các thư viện Boost cung cấp boost::lexical_cast , bao bọc xung quanh chuyển đổi chuỗi với một cú pháp như các kiểu phôi tích hợp.

#include <boost/lexical_cast.hpp>

text += boost::lexical_cast<std::string>(i);

Điều này cũng hoạt động theo cách khác, tức là để phân tích chuỗi.

189
Sebastian Redl
printf("Player %d", i);

(Tải xuống câu trả lời của tôi tất cả những gì bạn thích; Tôi vẫn ghét các toán tử I/O của C++.)

:-P

111
Eric

Chúng hoạt động cho các chuỗi chung (trong trường hợp bạn không muốn xuất ra tệp/bàn điều khiển, nhưng lưu trữ để sử dụng sau này hoặc một cái gì đó).

boost.lexical_cast

MyStr += boost::lexical_cast<std::string>(MyInt);

Luồng chuỗi

//sstream.h
std::stringstream Stream;
Stream.str(MyStr);
Stream << MyInt;
MyStr = Stream.str();

// If you're using a stream (for example, cout), rather than std::string
someStream << MyInt;
19
Fire Lancer

Đối với bản ghi, bạn cũng có thể sử dụng std::stringstream nếu bạn muốn tạo chuỗi trước khi nó thực sự xuất ra.

9
Jason Baker
cout << text << " " << i << endl;
6
jjnguy

Ví dụ của bạn dường như cho thấy rằng bạn muốn hiển thị một chuỗi theo sau là một số nguyên, trong trường hợp này:

string text = "Player: ";
int i = 4;
cout << text << i << endl;

sẽ làm việc tốt.

Nhưng, nếu bạn sẽ lưu trữ các vị trí chuỗi hoặc chuyển nó xung quanh và thực hiện việc này thường xuyên, bạn có thể hưởng lợi từ việc quá tải toán tử bổ sung. Tôi chứng minh điều này dưới đây:

#include <sstream>
#include <iostream>
using namespace std;

std::string operator+(std::string const &a, int b) {
  std::ostringstream oss;
  oss << a << b;
  return oss.str();
}

int main() {
  int i = 4;
  string text = "Player: ";
  cout << (text + i) << endl;
}

Trên thực tế, bạn có thể sử dụng các mẫu để làm cho phương pháp này mạnh mẽ hơn:

template <class T>
std::string operator+(std::string const &a, const T &b){
  std::ostringstream oss;
  oss << a << b;
  return oss.str();
}

Bây giờ, miễn là đối tượng b có đầu ra luồng được xác định, bạn có thể nối nó vào chuỗi của mình (hoặc, ít nhất, một bản sao của chuỗi đó).

4
Richard

Một khả năng khác là Boost.Format :

#include <boost/format.hpp>
#include <iostream>
#include <string>

int main() {
  int i = 4;
  std::string text = "Player";
  std::cout << boost::format("%1% %2%\n") % text % i;
}
3
Daniel James

Dưới đây là một ví dụ chuyển đổi/bổ sung làm việc nhỏ, với một số mã tôi cần trước đây.

#include <string>
#include <sstream>
#include <iostream>

using namespace std;

int main(){
string str;
int i = 321;
std::stringstream ss;
ss << 123;
str = "/dev/video";
cout << str << endl;
cout << str << 456 << endl;
cout << str << i << endl;
str += ss.str();
cout << str << endl;
}

đầu ra sẽ là:

/dev/video
/dev/video456
/dev/video321
/dev/video123

Lưu ý rằng trong hai dòng cuối cùng, bạn lưu chuỗi đã sửa đổi trước khi nó thực sự được in ra và bạn có thể sử dụng nó sau nếu cần.

2
Robert Parcus

Đối với bản ghi, bạn cũng có thể sử dụng lớp QString của Qt:

#include <QtCore/QString>

int i = 4;
QString qs = QString("Player %1").arg(i);
std::cout << qs.toLocal8bit().constData();  // prints "Player 4"
2
Brian Lenoski
cout << "Player" << i ;
1
rupello
cout << text << i;
1
john

Một phương pháp ở đây là in trực tiếp đầu ra nếu yêu cầu của nó trong vấn đề của bạn.

cout << text << i;

Khác, một trong những phương pháp an toàn nhất là sử dụng

sprintf(count, "%d", i);

Và sau đó sao chép nó vào chuỗi "văn bản" của bạn.

for(k = 0; *(count + k); k++)
{ 
  text += count[k]; 
} 

Vì vậy, bạn có chuỗi đầu ra cần thiết của bạn

Để biết thêm thông tin về sprintf, hãy theo dõi: http://www.cplusplus.com/reference/cstdio/sprintf

1
Saurabh Mishra
cout << text << i;

Toán tử << cho phép phát sóng trả về một tham chiếu đến khung hình, vì vậy bạn chỉ cần tiếp tục xâu chuỗi các hoạt động <<. Đó là, ở trên về cơ bản là giống như:

cout << text;
cout << i;
0
introp
cout << text << " " << i << endl;
0
GEOCHET

Bạn cũng thử nối số người chơi với std::string::Push_back:

Ví dụ với mã của bạn:

int i = 4;
string text = "Player ";
text.Push_back(i + '0');
cout << text;

Bạn sẽ thấy trong bảng điều khiển:

Người chơi 4

Cách dễ nhất tôi có thể tìm ra điều này là như sau ..
[.___.] Nó sẽ hoạt động như một chuỗi đơnmảng chuỗi. Tôi đang xem xét một mảng chuỗi, vì nó phức tạp (một chút tương tự sẽ được theo sau với chuỗi). Tôi tạo một mảng tên và chắp thêm một số nguyên và char với nó để cho thấy việc thêm một số intchars vào chuỗi, dễ dàng như thế nào hy vọng nó giúp. chiều dài chỉ để đo kích thước của mảng. Nếu bạn quen thuộc với lập trình thì size_t là không dấu int

#include<iostream>
    #include<string>
    using namespace std;
    int main() {

        string names[] = { "amz","Waq","Mon","Sam","Has","Shak","GBy" }; //simple array
        int length = sizeof(names) / sizeof(names[0]); //give you size of array
        int id;
        string append[7];    //as length is 7 just for sake of storing and printing output 
        for (size_t i = 0; i < length; i++) {
            id = Rand() % 20000 + 2;
            append[i] = names[i] + to_string(id);
        }
        for (size_t i = 0; i < length; i++) {
            cout << append[i] << endl;
        }


}
0
Code Black