0
我一直在C中創建字符串(char *)操作函數,我最近的一個是PHP類的子字符串函數。我發佈信息以便其他人可以從中受益,對於有關改進功能的任何建議,我將不勝感激。類似於PHP的子字符串函數C
我一直在C中創建字符串(char *)操作函數,我最近的一個是PHP類的子字符串函數。我發佈信息以便其他人可以從中受益,對於有關改進功能的任何建議,我將不勝感激。類似於PHP的子字符串函數C
這裏是C.
char *substr(char *str, int start, int num)
{
//find string length
int len = sj_strlen(str);
char *result;
//Return "" if start is longer than str
if(start > len || (start*-1) > len)
{
result = malloc(1);
*result = '\0';
return result;
}
//Setting pointer to appropriate position
if(start >= 0)
{
str += start;
}
else
{
str += (len+start);
}
//Allocate space for returned substring
result = malloc(num+1);
char *ptr = result;
//Adding characters to the result
while(num > 0 && *str)
{
*ptr++ = *str++;
num--;
}
//Terminating character
*ptr = '\0';
return result;
}
int main()
{
char *str = "Hello, world!";
printf("%s\n",substr(str,-10,2)); //outputs lo
printf("%s",substr(str,7,5)); //outputs world
}
的PHP字符串函數不是'的memcpy()'不是通過每個字符循環更好的選擇? – bansi
可能要檢查是否開始> len。和str == 0.並返回malloc的值。 –
現在你已經返回「」,另一個來自malloc()。如果用戶試圖釋放()「」結果不好。另外,需要應付start <-len。也許使用if(abs(start)> len)return strdup(「」); –