1. 程式人生 > >C語言 編寫一個函式,它從一個字串中提取一個子字串

C語言 編寫一個函式,它從一個字串中提取一個子字串

編寫一個函式,它從一個字串中提取一個子字串。函式原型如下:

int substr(char dst[], char src[],intstart, int len) {}

目標:

       從src陣列起始位置向後偏移start個字元的位置開始,最多複製len個非NUL字元到dst陣列。在複製完畢之後,dst陣列必須以NUL位元組結尾。函式的返回值是儲存於dst陣列中的字串的長度。

注意:

函式的宣告與呼叫;

空字元即為 \0;

#include <stdio.h>
int substr(char dst[], char src[],int start, int len)
{
    int i;
    for(i=0;i<len;i++)
    {
        dst[i]=src[start+i];    //從第start+i個元素開始向陣列內賦值
    }
        dst[i]='\0';
        return i;
}
int main()
{
    char dst[10];               //定義實參
    char src[]="abcdef";
    int m;
    m=substr(dst,src,2,4);      //函式呼叫
    printf("%s\n",dst);
    printf("%d",m);
    return 0;
}

上面的程式有一個問題就是如果給定賦值的個數超出了整個長度,雖然字串輸出是正確的,但是輸出的字串的個數卻超了。所以我們給它加上一個判斷來看所給的值是否超過了本身剩下的字串的長度;

#include <stdio.h>
int substr(char dst[], char src[],int start, int len)
{
	char *ps = src + start;     
	int n = strlen(ps);         //定義一個指標來求字串長度
	
	int i = 0;
	
	if(n<len)
	{
		len = n;
	}
	
	while(len--)
	{
		dst[i]= ps[i];
		i++;
	}
	dst[i] = '\0';
}
int main()
{
	char dst[] = "abcdefghi";
	char src[] = "bit-tech";
	substr(dst,src,2,7);
	printf("%s\n",dst);
	return 0;
}