我在谷歌搜索时遇到了以下代码,效果很好。(感谢 Chaitanya Bhatt @ Performancecompetence.com)
下面的函数搜索传递的分隔符的最后一次出现,并将输入字符串的剩余部分保存到返回的输出字符串中。
void strLastOccr(char inputStr[100], char* outputStr, char *delim)
{
char *temp, *temp2;
int i = 0;
temp = "";
while (temp!=NULL)
{
if(i==0)
{
temp2 = temp;
temp = (char *)strtok(inputStr,delim);
i++;
}
if(i>0)
{
temp2 = temp;
temp = (char *)strtok(NULL,delim);
}
lr_save_string(temp2,outputStr);
}
}
基本上试图添加两个新选项来传递。
Occurrence No:不是默认为最后一次出现,而是允许指定在哪个出现处停止并保存字符串的剩余部分。
要保存的部分字符串:(Left,Right)目前,一旦找到分隔符,字符串就会保存在右侧。附加选项旨在让用户指定用于找到分隔符的左侧或右侧。
void strOccr(char inputStr[100], char* outputStr, char *delim, int *occrNo, char *stringSide)
所以问题是我需要对上述功能进行哪些修改?实际上也可以这样做吗?
更新
在我坚持下去之后,我能够锻炼出一个解决方案。
由于我在另外 6 个小时内无法回答我自己的问题,因此将向谁可以提供改进的功能奖励积分。具体来说,我不喜欢注释“//删除字符串末尾的分隔符”下的代码。
void lr_custom_string_delim_save (char inputStr[500], char* outputStr, char *delim, int occrNo, int stringSide)
{
char *temp, *temp2;
char temp3[500] = {0};
int i = 0;
int i2;
int iOccrNo = 1;
temp = "";
while (temp!=NULL) {
if(i==0) {
temp2 = temp;
temp = (char *)strtok(inputStr,delim);
i++;
}
if(i>0) {
temp2 = temp;
temp = (char *)strtok(NULL,delim);
if (stringSide==0) {
if (iOccrNo > occrNo) {
strcat(temp3, temp2);
// Ensure an extra delim is not added at the end of the string.
if (temp!=NULL) {
// Adds the delim back into the string that is removed by strtok.
strcat(temp3, delim);
}
}
}
if (stringSide==1) {
if (iOccrNo <= occrNo) {
strcat(temp3, temp2);
strcat(temp3, delim);
}
}
// Increase the occurrence counter.
iOccrNo++;
}
}
// Removes the delim at the end of the string.
if (stringSide==1) {
for( i2 = strlen (temp3) - 1; i2 >= 0
&& strchr ( delim, temp3[i2] ) != NULL; i2-- )
// replace the string terminator:
temp3[i2] = '\0';
}
// Saves the new string to new param.
lr_save_string(temp3,outputStr);
}