博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c编程题目详解
阅读量:4213 次
发布时间:2019-05-26

本文共 2039 字,大约阅读时间需要 6 分钟。

以下是我的练习代码:

#include<stdio.h>

#include<ctype.h>
#include<string.h>
#include<assert.h>
#define MAX 100
bool find_char1(char **strings,char value);
bool find_char2(char **strings,char value);
const char * find_char(char const * source,char const * chars);
int main()
{
//char * str1="sunxiaowu";
//char *str2="xiaowu";
char str1[MAX]={0};
char str2[MAX]={0};
const char * str3;
printf("请输入两个字符串(以空格隔开)\n");
scanf("%s",str1);
scanf("%s",str2);
str3=find_char(str1,str2);
if(str3)
{
printf("匹配成功,匹配的第一个字符是%c\n",*str3);
}
return 0;
}

const char * find_char(char const * source,char const * chars)

{
const char * source1=source;
const char * chars1=chars;
if(source1 != NULL && source1 !="" && chars1 !=NULL && chars1 !="")
{
while (*source1)
{
while(*chars1)
{
if(*chars1==*source1)
{
 return chars1;
}
++chars1;
}
chars1=chars;
++source1;
}
}
return NULL;
}

书籍上的正确答案:

char * find_char_book(char const *str,char const * chars)

{
    char * cp;
    if(str != NULL && chars != NULL)
    {
        for(; *str!="\0"; ++str)
        {
            for(cp = chars; *cp!="\0"; ++cp)
                if(*str == *cp)
                return str;
        }
    }
    return NULL;
}

比较两者,个人认为答案的方法简单一些。两者之间的主要区别在于while和for的循环。我本想while(*source1++) 这种方式来循环,但是发现当使用这种方式时,source1指针会在此句执行之后(括号中语句执行之前)自动向前移一位,不行(因为我的目的是在括号中的语句执行之后再指针前移),而for(;*str!='\0";++str)这句就有我想要的效果,而且简洁),而source循环中嵌套的chars循环中,若使用while(*char1),则总体循环完成之后还要chars1=chars;指针还原。但若是使用for(cp = chars;*chars!="\0";++chars),则刚好符合条件,语句又简洁。

答案:

char *match(char *str,char *want)

{
    while (*want != '\0')
    {
        if(*str++ != *want++)
            return NULL;
    }
    return str;
}
bool del_substr_book(char *str,char *substr)
{
    char *next;
    while(*str != NULL)
    {
        next=match(str,substr);
        if(next != NULL)
        break;
        str++;
    }
    if(*str == '\0')
        return false;
    while (*str++ = *next++); //此句有问题
    return true;
}

我的答案:

void reverse_string(char * string)

{
    char * reverse_pt=string;
    while(*reverse_pt++);
    int count_num=reverse_pt-string-1;
    
    for(reverse_pt=string;count_num>1; count_num--)
    ++reverse_pt;
    char tmp;
    for(;*reverse_pt != *string;reverse_pt--,string++)
    {
        tmp=*reverse_pt;
        *reverse_pt=*string;
        *string=tmp;
    }
}

编程练习: 

   

我的答案:

 

你可能感兴趣的文章
leecode142题题解
查看>>
剑指offer-斐波那契数列的解法
查看>>
剑指offer-递归问题集合(使用迭代的方法对递归问题进行优化)
查看>>
剑指offer—二进制中1的个数
查看>>
剑指offer—用两个栈实现一个队列
查看>>
剑指offer——二维数组的查找
查看>>
剑指offer——替换字符串中的字符
查看>>
剑指offer——国王的游戏(幂运算)
查看>>
剑指offer——从前序遍历和中序遍历重建二叉树
查看>>
剑指offer——求二叉树的深度
查看>>
剑指offer——二叉树的镜像
查看>>
剑指offer——翻转链表
查看>>
使用sort对map的val值进行排序
查看>>
小记DB2远程连接不上解决
查看>>
[转]DB2监控sql
查看>>
Websphere was生成javacore
查看>>
WebSphere增加80端口
查看>>
DB2快速创建测试库
查看>>
利用db2look查看ddl
查看>>
rm -f 血的教训
查看>>