1.请编写一个函数,它在一个字符串中进行搜索,查找所有在一个给定字符集合中出现的字符。这个函数的原型应如下:
char * find_char(char const *source, char const *chars)
它的基本思想是查找source字符串中匹配chars字符串中任何字符的第一个字符,函数然后返回一个指向source中第一个匹配所找到的位置的指针。如果source中的所有字符均不匹配chars中的任何字符,函数就返回一个NULL指针。如果任何一个参数NULL,或任何一个参数所指向的字符串为NULL,或任何一个参数所指向的字符串为空,函数也返回一个NULL指针。
程序如下:
//字符串中查找所有给定字符集中出现的字符
#include<iostream>
#include<cstring>
char *find_char(char const *source,char const *chars)
{
if (source == NULL || chars == NULL)
{
return NULL;
}
char const *p_src = source;
char const *p_chr = NULL;
for (; p_src != NULL;p_src++)
{
char tmp = *p_src;
p_chr = chars;
for (; p_chr != NULL && *p_chr != 0; p_chr++)
{
if (*p_chr == tmp)
{
printf("char is : %c\r\n",tmp);
return (char*)p_src;
}
}
}
return NULL;
}
int main()
{
char *src = "ABC";
char *chars = "XAAA";
find_char(src,chars);
system("pause");
return 0;
}
输出
2.请编写一个函数,删除一个字符串的一部分。部分原型如下:
int del_substr(char * str, char const * substr)
函数首先应判断substr是否出现在str中。如果它并未出现,函数就返回0;如果出现,函数应该把str中位于该子串后面的所有字符复制带该子串位置,从而删除这个子串,然后这个函数返回1.如果substr多次出现在str中,函数只删除第一次出现的字符。函数的第二个参数绝不会被修改。
#include<iostream>
int del_substr(char *str, char const *substr)
{
int flag = 0; //判断是否相等
char *stringStr = str;
char *stringResult = NULL;
char const *stringSubstr = substr;
while (*stringStr != '\0')
{
if (*stringStr == *stringSubstr)
{
flag++;
stringResult = stringStr;
stringStr++;
stringSubstr++;
}
else
{
stringStr++;
stringSubstr = substr;
}
if (*(stringSubstr) == '\0')
{
while (*stringResult)
{
*(stringResult - flag) = *(++stringResult);
}
return 1;
}
}
return 0;
}
int main()
{
char s1[] = "Hello world!";
char s2[] = "llo";
int p = 0;
p = del_substr(s1, s2);
printf("%d\n%s\n", p,s1);
system("pause");
return 0;
}
输出结果
编写函数reverse_string,它的原型如下;
void reverse_string(char * string);
函数把参数字符串中的字符返向排列。
#include<iostream>
void reverse_string(char* str)
{
if (*str == '\0')
{
return;
}
reverse_string(str + 1);
printf("%c",*str);
}
int main()
{
char* arr = "Hello world!";
reverse_string(arr);
system("pause");
return 0;
}
输出结果