Arithmetic

C语言-指针与字符串:被调函数将小串追加到大串之后(程序填空)

PineappleCat · 5月17日 · 2019年 1223次已读

Description

程序有框架如下。程序的功能是:键盘输入两个字符串,被调函数将小串连接到大串之后。程序缺3处代码,请你把所缺代码提交。注意:不允许使用strlen、strcmp、strcat、strcpy等函数
/************************************/
  //缺头文件和函数定义
/************************************/
int main()  
{  
    char s1[31],s2[11],*p1,*p2,*t;
    p1=gets(s1);
    p2=gets(s2);
    //此处编写代码,使p1指向大串的首字符,使p2指向小串的首字符
    printf(“%s,%s\n”,p1,p2);
    sub(_______);  //此处缺少参数
    printf(“%s\n”,s1);
    return 0;  
}

Input

 输入两个串,第一个串不超过20字符,第二个串不超过10字符

Output

先输出大串和小串,然后再输出连接后的串

Sample Input

ABCD

asdf

Sample Output

asdf,ABCD

asdfABCD

#include <stdio.h>
#include <stdlib.h>
void sub(char *p1, char *p2, char *t)
{
    char s[11];
    int i = 0, count;
    char *p3 = p2;
    if(p2 != t)
    {
        //asd ASD
        while(*p1 != '\0')
        {
            p1++;
        }
        while(*p2!= '\0')
        {
            *p1 = *p2;
            p2++;
            p1++;
        }
        *p1 = '\0';
    }
    else
    {
        // ASD asd
        while(*p3 != '\0')
        {
            s[i] = *p3;
            p3++ ;
            i++;
        }
        s[i] = '\0';

        for( ; *p1 != '\0'; p1++, p2++)
            *p2 = *p1;
        count = i - 1;
        i = 0;
        for( ; i <= count; i++, p2++)
        {
            *p2 = s[i];
        }
        *p2 = '\0';
    }
}
int main()
{
    char s1[31],s2[11],*p1,*p2,*t;
    p1=gets(s1);
    p2=gets(s2);

    if(*p1 <= *p2)
    {
        t=p1;
        p1=p2;
        p2=t;
    }

    printf("%s,%s\n",p1,p2);
    sub(p1,p2,t);  //此处缺少参数
    printf("%s\n",s1);
    return 0;
}

第二种

void sub(char *p1,char *p2,char *s1)
{
    char s3[31];
    int i=0,j=0;
    while(*p1 != '\0')
    {
        s3[i] = *p1;
        p1++;
        i++;
    }
    while(*p2 != '\0')
    {
        s3[i] = *p2;
        p2++;
        i++;
    }
    s3[i]= '\0';
    while(s3[j])
    {
        *s1 = s3[j];
        s1++;
        j++;
    }
}

int main()
{
    char s1[31],s2[11],*p1,*p2,*t;
    p1=gets(s1);
    p2=gets(s2);

    char *p3,*p4;
    p3 = p1;
    p4 = p2;
    if(*p1 == *p2 )
    {
        while(*p1 == *p2 )
        {
            p1++;
            p2++;
            if(*p1 =='\0' && *p2!='\0')
            {
                t=p3;
                p3=p4;
                p4=t;
                break;
            }
            else if(*p1 !='\0' && *p2=='\0')
            {
                break;
            }
            else if(*p1 =='\0' && *p2=='\0' && *p1 < *p2)
            {
                t=p3;
                p3=p4;
                p4=t;
                break;
            }
        }
    }
    else if(*p1 < *p2)
    {
        t=p3;
        p3=p4;
        p4=t;
    }

    printf("%s,%s\n",p3,p4);
    sub(p3,p4,s1);  //此处缺少参数
    printf("%s\n",s1);
    return 0;
}

Click here to view the copyright notice of this site(点击此处查看本站版权声明)
5 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!

  1. 哈哈哈2020-12-3 · 19:22
    QQbrowser QQbrowser Android Android

    这个结果好像不太对啊

    • 菠萝猫2020-12-3 · 19:42
      Microsoft Edge Microsoft Edge Windows Windows

      改了下Sample Input 输入字符串后回车

      • 哈哈哈2020-12-3 · 19:48
        QQbrowser QQbrowser Android Android

        对了诶
        可以稍微讲一下被调里的想法吗

      • 菠萝猫2020-12-3 · 20:24
        Microsoft Edge Microsoft Edge Windows Windows

        两种情况
        1.如果p1一开始是小串(如ABCD ASCII码中小写比大写大) p1 p2需要交换 用if(p1 == t)来判断有没有交换字符串地址的比较 这样的话就直接在p1的后面加p2 最后’\0′
        2.如果p1 是大串(asdf) 就到了else里面

      • 菠萝猫2020-12-3 · 20:33
        Microsoft Edge Microsoft Edge Windows Windows

        有一个点 就是main函数最后输出的是s1 printf(“%s\n”,s1);