Other// 这样分配的字符串可以增长到199个字符
char str1[200] = "I am a teacher.";
// 这样分配的字符串无法增长,只能缩短
char str1[] = "I am a teacher.";
C++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);
}
C++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);
}
Other// str1是char[]字符串
char str1[200] = "I am a teacher.";
// str2是wchar_t[]字符串
wchar_t str1[200] = L"I am a teacher.";
Other// str1是char[]字符串
strrepl(str1 + 7, 0, "good ");
// str2是wchar_t[]字符串
wcsrepl(str2 + 7, 0, L"good ");
插入子串后的字符串『I am a good teacher.』。
C++// 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");
}
替换子串后的字符串『I am a good professor.』。
C++// 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);
}
删除子串后的字符串『a good professor.』。
Other#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>
[修改于 10年1个月前 - 2015/10/10 12:44:23]