/**/
/**********************************************************************
字符串移动函数
给定一个字符串,要求在给定位置进行左移。例如:给定”abcdefg”,给定
i = 3进行左移,得到的结果应该为”defgabc”
***********************************************************************/
char * MoveLeft1( char * str, int p)
... {
int len = strlen(str);
char *temp = new char[len + 1];
strncpy(temp, str, p);
strncpy(str, str + p, len - p);
strncpy(str + len - p, temp, p);
delete []temp;
temp = NULL;
return str;
}
/**/ /* from pi positon reverse the len char */
char * ReverseString( char * str, int pi, int len)
... {
assert(str != NULL);
char *p = str + pi;
char *q = str + pi + len - 1;
for (; p < q; p++, q--)
...{
*p = *p ^ *q;
*q = *p ^ *q;
*p = *p ^ *q;
}
return str;
}
/**/ /* another implemention using (a'b')'= ba */
char * MoveLeft2( char * str, int p)
... {
int len = strlen(str);
ReverseString(str, 0, p);
ReverseString(str, p, len - p);
ReverseString(str, 0, len);
return str;
}
/**/ /* rotate move left */
char * MoveLeft3( char * str, int p)
... {
int len = strlen(str);
for (int i = 0; i < p; i++)
...{
int temp = str[0];
for (int j = 1; j < len; j++)
...{
str[j - 1] = str[j];
}
str[len - 1] = temp;
}
return str;
}
字符串移动函数
给定一个字符串,要求在给定位置进行左移。例如:给定”abcdefg”,给定
i = 3进行左移,得到的结果应该为”defgabc”
***********************************************************************/
char * MoveLeft1( char * str, int p)
... {
int len = strlen(str);
char *temp = new char[len + 1];
strncpy(temp, str, p);
strncpy(str, str + p, len - p);
strncpy(str + len - p, temp, p);
delete []temp;
temp = NULL;
return str;
}
/**/ /* from pi positon reverse the len char */
char * ReverseString( char * str, int pi, int len)
... {
assert(str != NULL);
char *p = str + pi;
char *q = str + pi + len - 1;
for (; p < q; p++, q--)
...{
*p = *p ^ *q;
*q = *p ^ *q;
*p = *p ^ *q;
}
return str;
}
/**/ /* another implemention using (a'b')'= ba */
char * MoveLeft2( char * str, int p)
... {
int len = strlen(str);
ReverseString(str, 0, p);
ReverseString(str, p, len - p);
ReverseString(str, 0, len);
return str;
}
/**/ /* rotate move left */
char * MoveLeft3( char * str, int p)
... {
int len = strlen(str);
for (int i = 0; i < p; i++)
...{
int temp = str[0];
for (int j = 1; j < len; j++)
...{
str[j - 1] = str[j];
}
str[len - 1] = temp;
}
return str;
}