如何在 C++ 中列印字串
本文將演示有關如何在 C++ 中列印字串的多種方法。
使用 std::cout
和 <<
操作符列印字串
std::cout
是控制輸出到流緩衝區的全域性物件。為了將 s1
字串變數輸出到緩衝區,我們需要使用運算子-<<
稱為流插入運算子。下面的例子演示了單字串輸出操作。
#include <iostream>
#include <string>
#include <iterator>
using std::cout; using std::cin;
using std::endl; using std::string;
int main(){
string s1 = "This string will be printed";
cout << s1;
cout << endl;
return EXIT_SUCCESS;
}
輸出:
This string will be printed
使用 std::copy
演算法列印字串
copy
方法來自 <algorithm>
STL 庫,它可以用多種方式操作範圍元素。由於我們可以把 string
容器本身作為一個範圍來訪問,所以我們可以通過在 copy
演算法中加入 std::ostream_iterator<char>
引數來輸出每個元素。
注意,這個方法也可以在字串的每個字元之間傳遞一個特定的定界符。在下面的程式碼中,沒有指定定界符(""
)以原始形式列印字串。
#include <iostream>
#include <string>
#include <vector>
#include <iterator>
using std::cout; using std::cin;
using std::endl; using std::string;
using std::vector; using std::copy;
int main(){
string s1 = "This string will be printed";
copy(s1.begin(), s1.end(),
std::ostream_iterator<char>(cout, ""));
cout << endl;
return EXIT_SUCCESS;
}
使用 printf()
函式列印字串
printf
是用於格式化輸出的強大工具。它是 C 標準輸入輸出庫的一部分。它可以直接從 C++ 程式碼中呼叫。printf
的引數數量是可變的,它將字串變數作為 char *
型別,這意味著我們必須從 s1
變數中呼叫 c_str
方法來傳遞它作為引數。請注意,每個型別都有自己的格式指定符(例如,string
-%s
),它們列在下面的表格中。
指定符 | 說明 |
---|---|
% |
列印 % 字元(這種型別不接受任何標誌、寬度、精度、長度欄位) |
d, i |
int 作為一個有符號的整數。%d 和 %i 是輸出的同義詞,但當與 scanf 一起使用時,輸入就不同了(使用%i 會將數字解釋為十六進位制,如果前面是 0x,則解釋為八進位制。) |
u |
列印十進位制無符號 int |
f, F |
f 和 F 只是在無限數或 NaN 的字串列印方式上有所不同(f 為 inf、infinity 和 nan;F 為 INF、INFINITY 和 NAN) |
e,E |
標準形式的 double (d.dde±dd )。E 轉換使用字母 E(而不是 e)來引入指數。 |
g, G |
在正常或指數表示法中使用 double ,以其大小更合適。g 使用小寫字母,G 使用大寫字母。 |
x, X |
x 使用小寫字母,X 使用大寫字母。 |
o |
八進位制的無符號整型 |
s |
以空為結束的字串 |
c |
char(字元) |
p |
void* (指向 void 的指標),採用執行定義的格式。 |
a, A |
以十六進位制表示法的 double 值,從 0x 或 0X 開始。a 使用小寫字母,A 使用大寫字母。 |
n |
不列印任何內容,但將目前成功寫入的字元數寫入一個整數指標引數中。 |
#include <iostream>
#include <string>
#include <iterator>
using std::cout; using std::cin;
using std::endl; using std::string;
int main(){
string s1 = "This string will be printed";
cout << s1;
cout << endl;
printf("%s", s1.c_str());
cout << endl;
return EXIT_SUCCESS;
}
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn