問題描述:
在給定字符串中查找所有特定子串並刪除,如果沒有找到相應子串,則不作任何操作。
要求實現函數:
int delete_sub_str(const char *str, const char *sub_str, char *result_str)
【輸入】 str:輸入的被操作字符串
sub_str:需要查找並刪除的特定子字符串
【輸出】 result_str:在str字符串中刪除所有sub_str子字符串後的結果
【返回】 刪除的子字符串的個數
int delete_sub_str(const char *str, const char *sub_str, char *result_str)
{
/*
//----------------------------第一種方法------------------------------
const char *p1 = str;
const char *p2 = sub_str;
char *p3 = result_str;
int count = 0;
while(*p1 != '\0')
{
const char *ptemp;
if(*p1 != *p2)
{
*p3 = *p1;
p3++;
}
else
{
ptemp = p1;
while(*p1 == *p2)
{
p1++;
p2++;
}
if(*p2 == '\0' && *p1 != '\0')
{
count++;
p1--;
p2 = sub_str;
}
else if((*(--p1) == '\0') && (*(--p2) == '\0'))
{
count++;
break;
}
else
{
p1 = ptemp;
*p3++ = *p1;
p2 = sub_str;
}
}
p1++;
}
*p3 = '\0';
return count;
*/
//--------------------------第二種方法-------------------------------------------
size_t str_len = strlen(str);
size_t sub_len = strlen(sub_str);
const char *pos = strstr(str,sub_str);
int count = 0;
size_t i = 0, k = 0;
while(pos != NULL)
{
count ++;
while(&str[i] != pos)
{
result_str[k++] = str[i++];
}
i = i + sub_len;
pos = strstr(pos + sub_len,sub_str);
}
if(pos == NULL)
{
while(i < str_len)
result_str[k++] = str[i++];
}
result_str[k] = '\0';
return count;
}
2、約瑟夫問題
問題描述:
輸入一個由隨機數組成的數列(數列中每個數均是大於0的整數,長度已知),和初始計數值m。從數列首位置開始計數,計數到m後,將數列該位置數值替換計數值m,並將數列該位置數值出列,然後從下一位置從新開始計數,直到數列所有數值出列爲止。如果計數到達數列尾段,則返回數列首位置繼續計數。請編程實現上述計數過程,同時輸出數值出列的順序
比如:輸入的隨機數列爲:3,1,2,4,初始計數值m=7,從數列首位置開始計數(數值3所在位置)
第一輪計數出列數字爲2,計數值更新m=2,出列後數列爲3,1,4,從數值4所在位置從新開始計數
第二輪計數出列數字爲3,計數值更新m=3,出列後數列爲1,4,從數值1所在位置開始計數
第三輪計數出列數字爲1,計數值更新m=1,出列後數列爲4,從數值4所在位置開始計數
最後一輪計數出列數字爲4,計數過程完成。
輸出數值出列順序爲:2,3,1,4。
要求實現函數:
void array_iterate(int len, int input_array[], int m, int output_array[])
【輸入】 int len:輸入數列的長度;
int intput_array[]:輸入的初始數列
int m:初始計數值
【輸出】 int output_array[]:輸出的數值出列順序
【返回】 無
示例
輸入:int input_array[] = {3,1,2,4},int len = 4, m=7
輸出:output_array[] = {2,3,1,4}
void array_iterate(int len, int input_array[], int m, int output_array[])
{
struct node
{
int data;
node *next;
};
node *head = new node;
head->data = input_array[0];
head->next = NULL;
node *pmove = head;
int i = 1;
while(i < len)
{
node *ptemp = new node;
ptemp->data = input_array[i];
ptemp->next = NULL;
pmove->next = ptemp;
pmove = pmove->next;
i++;
}
pmove->next = head;
int k = 0;
node *prenode;
while(k != len)
{
while(m > 0)
{
prenode = pmove;
pmove = pmove->next;
m--;
}
output_array[k++] = pmove->data;
m = pmove->data;
prenode->next = pmove->next;
delete pmove;
pmove = prenode;
}
}