贡献者: addis
可以用 C++ 解释器 Cling 方便测试。printf 参考 C 语言笔记。
"abc" "def"(中间可以换行)相当于 "abcdef"。
u8"..." 指定对字符串使用 UTF-8 编码(一些编译器不加 u8 也默认使用 UTF-8),U"..." 用于把字符串转换为 UTF-32 编码(basic_string<char32_t> 类型)。这和源码文件的字符编码无关(首先确保你的文本文件使用编译器指定的编码)。
R"(一些字符串)" 是 raw string R"delimiter(一些字符串)delimiter" 是更安全的裸字符串。
u8_iter。
\0数字(8 进制)或 \x数字(16 进制)来指定某个不好表示的字符。
R"(一些字符)"。里面的字符不会被 escape。若要更裸一点,还可以用 R"自定义标志(一些字符)自定义标志"。中间的 一些字符 可以换行。
const char * 输入字符串(会需要手打很多 .c_str())。或者其次用 const string& 加上一个 index 指明起始位置,或者用 C++17 的 string_view。
std::tolower() 变为小写,std::toupper() 变为大写,std::isalpha() 是字母,std::isdigit() 是数字。
\0 结尾的字符串.
strlen() 函数用于返回字符串长度(不包括 \0), 返回类型是 size_t. 对于 wchar_t 字符串, 用 wcslen().
int strcmp(pstr1, pstr2) 比较两个字符串,若返回 0 则相等,小于零则不相等且第一个字符串较小,大于零则较大。大小的比较使用 lexicographic 顺序,即逐个字节比较值的大小,第一个不同的字节决定大小。若 str1 是 str2 的开头的一小部分,那么 str1 较小(因为 \0 肯定更小)。
strcpy(pstr1, pstr2) 把 pstr2 指向的字符串拷贝的 pstr1 的地址。如果 pstr1 分配的长度不够,会继续往后写产生内存错误。更安全的版本是 errno_t strcpy_s(char *dest, rsize_t destsz, const char *src);。如果成功,返回 0,若失败,dest 被设为空字符串。另一个安全版本是 char *strncpy(char *destination, const char *source, size_t num);。num 是最多复制的字符数,超出该长度的部分会被忽略。
char *strcat(char *dest, const char *src); 把 src 添加到 dest 末尾(若没有分配足够的空间则会内存溢出)返回 dest。一个更安全的函数是 char *strncat(char *destination, const char *source, size_t num);。如果 source 的长度大于 num,那么只会赋值 num 个。
char *result = strstr(string, substring); 可以查找子字符串,若找不到返回空指针。
#include <string>, use string.
string s1;, string s2{s1};, string s3{"something"};, string s4(10, 'c');
string::empty() 判断是否是空.
string::size() 返回字符数.
str[n] 可以直接读取或赋值某个字符.
str1 + str2 可以连接两个字符串.
str1 + "something" 可以连接 string 和 literal, 但不能是 wchar_t.
str1 == str2, str1 != str2 可以比较字符串是否相同.
size_t string::find(char或const string&, size_t start);若找不到,返回 string::npos(no position 的缩写),这和 numeric_limits<size_t>::max() 是一样的。若嫌麻烦也可以 using string::npos。
str.erase(ind,len) 可以删除一个子串,str.erase(ind) 可以删除 ind 开始的所有东西。ind+len 可以超出边界。
str.replace(ind,len,new_str) 可以替换子字符串,同样 ind+len 可以超出边界。
key,见 SLISC 的 replace(str,key,new_str)。
str.starts_with("abc") 和 str.ends_with("abc") 可以检查字符串开头和结尾。也可以自己写一个:
bool startsWith(const string& fullString, const string& starting) {
return fullString.size() >= starting.size() &&
std::equal(starting.begin(), starting.end(), fullString.begin());
}
+,- 号,然后跟一串数字,直到遇见非数字。
stoi, stol, stoll(C++)(sto 代表 "string to")(例如 int stoi(const string &str, size_t *pos = nullptr, int base = 10);)pos 用于输出处理了多少个字符。但是缺点是如果处理子串,需要生成一个新的字符串,进行不必要的复制和内存分配。如果出错会 throw。
strtol, strtoll(不存在 strtoi)(C 语言)例如 long strtol(const char* str, char** str_end, int base),str_end 会指向处理完的后一个字符。如果出错,会把 errno 设为 ERANGE (在调用前要手动先设为 0,比较麻烦)。
atoi, atol, atoll(C 语言)(ascii to integer 的缩写)例如 int atoi( const char* str );。不建议用,因为如果超出 int 范围的行为没有定义,如果转换不了会返回 0。
wchart_t 类型的 literal 例如 L"this is a string"
<< endl 用于换行且 cout.flush()(把缓存立即输出)。
cin >> 会忽略任意多个空格和回车,以及 tab 等空白字符。读取字符串时,遇到空白字符结束。如果 parse 错误或者遇到 EOF,则不会赋值,并设置相应的错误 bit。此时如果 if(cin),就会转换为 false。
<< hex << 把后面的数字都变成 16 进制, << dec << 把后面的数字都变成 10 进制.
cin.getline(char* s, streamsize n, char delim) 用于读取一个 char[] name, 不超过 n 个字符(一般设为 s 的长度),到 delim 之前停止。然后存在 s 里面, 后面加上 \0.
std::getline(std::istream& input, std::string& str, char delim); 功能也类似,只是输出的类型改变。
cout.precision(N); 可以控制输出的有效数字位数.
<< std::fixed 可以把后面的浮点数都不适用科学计数法 << std::setprecision(3) 在非科学计数法中规定小数点后的位数。所以二者一起使用就是定点定位数小数。如果单独使用 << std::setprecision(3),就取 3 为有效数字而不是小数,输出的字符串可能是科学计数法。
setw(n) 用于把两个数字的间隔控制在 n 个字节之内. (用于列对齐).
setprecision(n) 用于显示 n 位小数.
setiosflags(ios::left) 用于左对齐, 另有 ios::fixed (非科学计数法) 或 ios::right .
0 开头的字节都是 ascii 字符。
10 开头的字节都不是字符的起始字节,不是字符起始的字节都是 10 开头的。
110 开头的字节是用 2 个字节表示一个字符。
1110 开头的字节用 3 个字节表示一个字符。
11110 开头的字节用 4 个字节表示一个字符。
string::find() 可以正常使用。
string::find_first_of() 这样的函数就用不了了。因为单个字符一般也要用字符串来表示。
basic_string<char32_t> 和 U"字符串" 最容易,体验和 python 差不多。但许多人还是喜欢 utf-8(甚至微软的 utf-16)。
CString(TCHAR str) 可以把 str 从 TCHAR 转换成 CString.
CString Class 需要 #include <atlstr.h>
wcout << str.GetString(). str 是 CString 的一个 object.
Format 函数可以把数值转换为 cstring. int num; CString str{}; str.Format(_T("%d"), num);
CString::GetLength() 函数可以返回字符个数.
CString::GetAt() 可以获取某个字符
CString::Left(int count) 获取左边 count 个字符 CString::Right 同理.
CString::GetMid(int start, int count) 可以获取 substring
CString::Delete(int index, ind nCount) 函数可以删除从第 index 到 index + nCount -1 的 nCount 个字符.
CString::Insert(ind index, CString str) 可以把 str 插入到 index 的位置.
CString CString::Left(int nCount) 提取前 nCount 个字符.
wcout 输出中文, 要添加头文件 <io.h> 和 <fcntl.h>, 然后添加命令 _setmode(_fileno(stdout), _O_U16TEXT); 要还原, 添加 _setmode(_fileno(stdout), _O_TEXT); 注意只有在两条命令之间可以输出中文, 且不能使用 cout.
 
 
 
 
 
 
 
 
 
 
 
友情链接: 超理论坛 | ©小时科技 保留一切权利