C笔试题

本文介绍了三种实用的编程技巧:使用C语言实现字符串回文判断的两种方法;在仅有一个指向非尾节点的指针情况下,如何实现单向链表中节点的删除;以及如何实现单词级别的字符串反转,所有这些都在不增加额外空间复杂度的前提下完成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

字符串中每个单词(子串)的逆序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值