我是靠谱客的博主 坦率花卷,最近开发中收集的这篇文章主要介绍c编程题目详解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述


以下是我的练习代码:

#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("匹配成功,匹配的第一个字符是%cn",*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!=""; ++str)
        {
            for(cp = chars; *cp!=""; ++cp)
                if(*str == *cp)
                return str;
        }
    }
    return NULL;
}


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

答案:

char *match(char *str,char *want)
{
    while (*want != '')
    {
        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 == '')
        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;
    }
}


编程练习: 

   

我的答案:

 


最后

以上就是坦率花卷为你收集整理的c编程题目详解的全部内容,希望文章能够帮你解决c编程题目详解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部