<code class="lang-cpp">// 这样分配的字符串可以增长到199个字符 char str1[200] = "I am a teacher."; // 这样分配的字符串无法增长,只能缩短 char str1[] = "I am a teacher.";</code>
<code class="lang-cpp">char *strmove(char *ptr2, const char *ptr1, int tz) { return (char*)memmove(ptr2, ptr1, strlen(ptr1) + tz); } wchar_t *wcsmove(wchar_t *ptr2, const wchar_t *ptr1, int tz) { return wmemmove(ptr2, ptr1, wcslen(ptr1) + tz); }</code>
<code class="lang-cpp">char *strrepl(char *repl_pos, rsize_t repl_sz, const char *src) { if (repl_sz > strlen(repl_pos)) repl_sz = strlen(repl_pos); strmove(repl_pos + strlen(src), repl_pos + repl_sz, 1); strmove(repl_pos, src, 0); return repl_pos + strlen(src); } wchar_t *wcsrepl(wchar_t *repl_pos, rsize_t repl_sz, const wchar_t *src) { if (repl_sz > wcslen(repl_pos)) repl_sz = wcslen(repl_pos); wcsmove(repl_pos + wcslen(src), repl_pos + repl_sz, 1); wcsmove(repl_pos, src, 0); return repl_pos + wcslen(src); }</code>
<code class="lang-cpp">// str1是char[]字符串 char str1[200] = "I am a teacher."; // str2是wchar_t[]字符串 wchar_t str1[200] = L"I am a teacher.";</code>
<code class="lang-cpp">// str1是char[]字符串 strrepl(str1 + 7, 0, "good "); // str2是wchar_t[]字符串 wcsrepl(str2 + 7, 0, L"good ");</code>插入子串后的字符串『I am a good teacher.』。
<code class="lang-cpp">// str1是char[]字符串 char *repl_pos1 = strstr(str1, "teacher"); if (repl_pos1 != NULL) { strrepl(repl_pos1, strlen("teacher"), "professor"); } // str2是wchar_t[]字符串 wchar_t *repl_pos2 = wcsstr(str2, L"teacher"); if (repl_pos2 != NULL) { wcsrepl(repl_pos2, wcslen(L"teacher"), L"professor"); }</code>替换子串后的字符串『I am a good professor.』。
<code class="lang-cpp">// str1是char[]字符串 char *del_pos1 = strstr(str1, "I am "); if (del_pos1 != NULL) { //strrepl(del_pos, strlen("I am "), ""); strmove(del_pos1, del_pos1 + strlen("I am "), 1); } // str2是wchar_t[]字符串 wchar_t *del_pos2 = wcsstr(str2, L"I am "); if (del_pos2 != NULL) { //wcsrepl(del_pos2, wcslen(L"I am "), L""); wcsmove(del_pos2, del_pos2 + wcslen(L"I am "), 1); }</code>删除子串后的字符串『a good professor.』。
<code class="lang-cpp">#include <fcntl.h> // _O_U16TEXT (unicode console) #include <io.h> // _setmode (unicode console) #include <stdio.h> // wprintf #include <string.h> // memmove, strlen, strstr #include <wchar.h> // wmemmove, wcslen, wcsstr char *strmove(char *ptr2, const char *ptr1, int tz) { return (char*)memmove(ptr2, ptr1, strlen(ptr1) + tz); } char *strrepl(char *repl_pos, rsize_t repl_sz, const char *src) { if (repl_sz > strlen(repl_pos)) repl_sz = strlen(repl_pos); strmove(repl_pos + strlen(src), repl_pos + repl_sz, 1); strmove(repl_pos, src, 0); return repl_pos + strlen(src); } wchar_t *wcsmove(wchar_t *ptr2, const wchar_t *ptr1, int tz) { return wmemmove(ptr2, ptr1, wcslen(ptr1) + tz); } wchar_t *wcsrepl(wchar_t *repl_pos, rsize_t repl_sz, const wchar_t *src) { if (repl_sz > wcslen(repl_pos)) repl_sz = wcslen(repl_pos); wcsmove(repl_pos + wcslen(src), repl_pos + repl_sz, 1); wcsmove(repl_pos, src, 0); return repl_pos + wcslen(src); } void narrow_replace(void) { char str1[200] = "I am a teacher."; printf("%s\n", str1); strrepl(str1 + 7, 0, "good "); printf("%s\n", str1); char *repl_pos1 = strstr(str1, "teacher"); if (repl_pos1 != NULL) { strrepl(repl_pos1, strlen("teacher"), "professor"); } printf("%s\n", str1); char *del_pos1 = strstr(str1, "I am "); if (del_pos1 != NULL) { //strrepl(del_pos, strlen("I am "), ""); strmove(del_pos1, del_pos1 + strlen("I am "), 1); } printf("%s\n", str1); } void wide_replace(void) { wchar_t str2[200] = L"I am a teacher."; wprintf(L"%s\n", str2); wcsrepl(str2 + 7, 0, L"good "); wprintf(L"%s\n", str2); wchar_t *repl_pos2 = wcsstr(str2, L"teacher"); if (repl_pos2 != NULL) { wcsrepl(repl_pos2, wcslen(L"teacher"), L"professor"); } wprintf(L"%s\n", str2); wchar_t *del_pos2 = wcsstr(str2, L"I am "); if (del_pos2 != NULL) { //wcsrepl(del_pos2, wcslen(L"I am "), L""); wcsmove(del_pos2, del_pos2 + wcslen(L"I am "), 1); } wprintf(L"%s\n", str2); } int wmain(int argc, wchar_t* argv[]) { _setmode(_fileno(stdin), _O_U16TEXT); // unicode console _setmode(_fileno(stdout), _O_U16TEXT); _setmode(_fileno(stderr), _O_U16TEXT); wprintf(L"wchar_t[]:\n"); wide_replace(); _setmode(_fileno(stdin), _O_TEXT); // non-unicode console _setmode(_fileno(stdout), _O_TEXT); _setmode(_fileno(stderr), _O_TEXT); printf("char[]:\n"); narrow_replace(); return 0; }</wchar.h></string.h></stdio.h></io.h></fcntl.h></code>
[修改于 8年7个月前 - 2015/10/10 12:44:23]
时段 | 个数 |
---|---|
{{f.startingTime}}点 - {{f.endTime}}点 | {{f.fileCount}} |