恩,我来实现一个字符串截取的程序,而且在合法范围内任意截取。这应该是楼主所需要的吧。 #include "stdio.h" #include "conio.h" #include "string.h"
#define ARRMAX 128
char* sStrCat(char* Src,int Start,int End);
int main(void) { int Start,End; /*截取的开始位置及结束位置*/ int SrcLen; /*字符串的长度*/ char SrcString[ARRMAX]; /*存储字符串的数组*/ char* pSrc = SrcString;
puts("Input the Source String:\n"); scanf("%s",pSrc); /*得到字符串*/
SrcLen = strlen(pSrc); /*得到字符串长度*/
if(SrcLen > ARRMAX) /*传递给 sStrCat 函数的字符串必须正确,字符串除错是客户调用程序的责任*/ { puts("\nString Length long more than 128 or Null!"); getch(); exit(0); }
printf("\nString Length: %d\nSource string : %s\n",SrcLen,pSrc); puts("\nIntercept Start Point:"); scanf("%d",&Start); /*得到截取的起始点*/ puts("\nIntercept End Point:"); scanf("%d",&End); /*得到截取的终止点*/
/*验证截取的起始点和结束点,起始点大于结束点,或起始点或终止点大于数组允许的最大长度或数组当前长度, 或起始点终止点小于 0,或终止点小于 0 */ if(Start < 0 || Start > End || End > SrcLen) { puts("\nStart or End point Error!"); getch(); exit(0); }
printf("\nIntercept String : %s\n",sStrCat(pSrc,Start,End));
getch(); return 0; }
/*取出由起始点到终止点(包括起始点和终止点)之间的字符,允许起始点和终止点相同*/ char* sStrCat(char* Src,int Start,int End) { char sRetStr[ARRMAX]; int T = 0; int TTime = End - Start + 1; /*得到截取的字符的个数,包括起始点和终止点,那么字符数应该是终止点减去起始点加1*/
Start = Start - 1; /*因为字符数组由下标0开始,所以 Start 要减一个1 */
while(T < TTime) sRetStr[T++] = Src[Start++];
sRetStr[T] = '\0';
return sRetStr; }