目录
一、前言
在C++中,处理字符和字符串是基本操作之一,涉及到各种数据类型和函数。今天,我对C++中的字符和字符串打印进行一个全面的总结,包括基础的字符处理以及使用标准库中的字符串类及字符串打印,希望对大家有帮助。
二、字符串常见操作
2.1. 字符打印
在C++中,字符通常用char类型表示。打印字符可以使用C++的标准输入输出库iostream。
#include <iostream>
int main() {
char c = 'A';
std::cout << "打印字符: " << c << std::endl;
return 0;
}
结果输出:
2.2. 字符数组和C风格字符串
C++中的字符串原始形式是通过字符数组实现的,这通常被称为C风格字符串。C风格字符串以空字符\0结尾。
#include <iostream>
int main() {
char str[] = "Hello, world!";
std::cout << "打印C风格字符串: " << str << std::endl;
return 0;
}
结果输出:
2.3. std::string 类
C++标准库提供了一个字符串类型std::string,它比C风格字符串更加安全和方便。
#include <iostream>#include <string>
int main() {
std::string s = "Hello, world!";
std::cout << "打印std::string: " << s << std::endl;
return 0;
}
结果输出:
2.4. 字符串拼接
使用std::string可以很容易地进行字符串拼接。
#include <iostream>#include <string>
int main() {
std::string s1 = "Hello";
std::string s2 = ", world!";
std::string s3 = s1 + s2;
std::cout << "拼接字符串: " << s3 << std::endl;
return 0;
}
结果输出:
2.5. 字符串输入
接收用户输入的字符串。
#include <iostream>#include <string>
int main() {
std::string input;
std::cout << "请输入字符串: ";
std::getline(std::cin, input);
std::cout << "你输入的是: " << input << std::endl;
return 0;
}
结果输出:
2.6. 遍历字符串
遍历字符串的字符可以使用范围基的for循环或传统的for循环。
#include <iostream>#include <string>
int main() {
std::string s = "Hello";
std::cout << "遍历字符串: ";
for (char c : s) {
std::cout << c << ' ';
}
std::cout << std::endl;
return 0;
}
结果输出:
2.7. 字符串与数字的转换
#include <iostream>#include <string>#include <sstream>
int main() {
std::string str = "1024";
int num;
std::stringstream ss(str);
ss >> num; // 字符串到数字
std::cout << "数字: " << num << std::endl;
num = 2048;
ss.str(""); // 清空stringstream
ss.clear(); // 重置错误标志
ss << num; // 数字到字符串
std::string new_str = ss.str();
std::cout << "字符串: " << new_str << std::endl;
return 0;
}
结果输出:
三、字符串打印
C语言中 %02X:
X 表示以十六进制形式输出
02 表示不足两位,前面补0输出;
举例:
printf("%02X", 0x123); //打印出:123
printf("%02X", 0x1); //打印出:01
char mac[32];
snprintf(mac, 6, "%2x:%2x:%2x:%2x:%2x:%2x",pe->Addr[0], pe->Addr[1], pe->Addr[2], pe->Addr[3],pe->Addr[4], pe->Addr[5]); //failed 应该为%02x
memcpy(mac, pe->Addr, 6);
%d,%c,%s,%x是程序汇编语言中的格式符,它们的含义:
%c格式对应的是单个字符,%s格式对应的是字符串。
char a;
char b[20];
scanf("%c",&a); //只能输入一个字符。
scanf("%s",b); //可以输入一串不超过20字符的字符串。
%c对应类型为char, %s对应类型为char * , 即字符串
用作输入时, 二者参数都要传char * 型.
%c输入函数只会对一个字节空间赋值. 而%s会一直赋值,直到输入中遇到空白字符为止.
用作输出时, %c传char类型,输出一个字符. %s传char*类型参数, 输出到\0为止.
%c只能输出或输入一个字符,%s输出的是一串字符还有就是char a; string s;
输入的时候scanf("%c", &a);这里的&不能少
而scanf("%s",s);这里不能有&符号
字符转换说明:
%a(%A) 浮点数、十六进制数字和p-(P-)记数法(C99)
%c 字符
%d 有符号十进制整数
%f 浮点数(包括float和doulbe)
%e(%E) 浮点数指数输出[e-(E-)记数法]
%g(%G) 浮点数不显无意义的零"0"
%i 有符号十进制整数(与%d相同)
%u 无符号十进制整数
%o 八进制整数 e.g. 0123
%x(%X) 十六进制整数0f(0F) e.g. 0x1234
%p 指针
%s 字符串
%% "%"
标志:
左对齐:"-" e.g. "%-20s"
右对齐:"+" e.g. "%+20s"
格式字符串(格式):
〔标志〕〔输出最少宽度〕〔.精度〕〔长度〕类型
"%-md" : 左对齐,若m比实际少时,按实际输出。
"%m.ns" : 输出m位,取字符串(左起)n位,左补空格,当n>m or m省略时m=n
"%m.nf" : 输出浮点数,m为宽度,n为小数点右边数位
"%3.1f" : 输入3852.99 输出3853.0