1、写一函数int fun(char *p)判断一字符串是否为回文,是返回1,不是返回0,出错返回-1.(例如:字符串”123454321”就是回文字符串)
int fun(char *p)
{
if (p == NULL)
{
return -1;
}
int length = 0;
int i = 0;
int judge = 1;
length = strlen(p);
for (i=0; i<length/2; i++)
{
if (p[i] != p[length-1-i])
judge = 0;
break;
}
if (judge == 0)
return 0;
else
return 1;
}
int fun2(char *p)
{
int len = strlen(p) - 1;
char *q = p+len;
if (!p)
return -1;
while(p<q)
{
if ((*p++) != (*q--))
return 0;
}
return 1;
}
int main(void)
{
char a[] = "abcdcbad";
char b[] = "abcdcba";
printf("%d\n", fun(a));
printf("%d\n", fun2(b));
return 0;
}
2、假设现有一个单向的链表,但是只知道只有一个指向该节点的指针p,并且假设这个节点不是尾节点,试编程实现删除此节点。
节点结构:struct node
{
int data;
struct node *p_next;
};
目的:删除p指向的结点B(不是尾节点)
须将B前后的两个节点A和C连接起来,但是没有头结点,无法将A和C相连,就无法删除B,但我们可以删除B之后的C,并通过p->next = p->next->next重新将链表连接起来,而唯一丢失的是结点C的数据项data。
因此,只须将C的数据取代B的数据,然后将真正指向结点C的指针删除即可是实现将结点B删除。
3、Write a function string reverse string word By word(string input) that reverse a string word by word.
写一个函数字符串反向字符串一个单词(字符串输入),一个单词一个单词反一个字符串。
For instance:
“The house is blue” –> “blue is house The”
“Zed is dead” –>”dead is Zed”
“All-in-one” –> “one-in-All”
在不增加任何辅助数组空间的情况下,完成function
字符串中每个单词(子串)的逆序