| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1149 人关注过本帖
标题:深夜求解,被困扰1个多小时了。
只看楼主 加入收藏
q452227361
Rank: 1
等 级:新手上路
帖 子:16
专家分:4
注 册:2015-4-1
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:29 
深夜求解,被困扰1个多小时了。
程序代码:
/*8.6写一函数,将两个字符串连接起来。*/

#include<stdio.h>
#include<string.h>
int main(void){
    void cat(char x[],char y[],int n,int m);
    char a[30];
    char b[30];
    int i;
    int j;
    printf("请输入第一个字符串:\n");
    gets(a);
    i=strlen(a);
    printf("请输入第二个字符串:\n");
    gets(b);
    j=strlen(b);
    cat(a,b,i,j);
    printf("将它们连接起来为:\n");
    puts(a);
    return 0;
}
void cat(char x[30],char y[30],int n,int m){
    int i,j;
    x[n+1]=' ';
    for(i=n+2,j=0;j<m;i++,j++){        /*我这里思路是想在第一字符串的后面直接通过有效长度的数值将第二个字符串加上去*/
        x[i]=y[j];                    /*但是结果一直是输出第一字符串,不知道是哪里有问题。个人感觉这个思路应该问题不大吧*/
    }
    x[i]='\0';
}
2015-04-01 02:02
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:4 
没仔细看你的代码。思路没问题,根据你描述的现象,一直輸出第一个字符串,那么大致是没处理字符串的结束符'\0'。你照这个方向查吧。

授人以渔,不授人以鱼。
2015-04-01 02:25
gys123456
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-3-15
收藏
得分:0 
你函数的参数是字符值,不是地址指针,也就是改变的只是形参
2015-04-01 03:16
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:4 
void cat(char x[30],char y[30],int n,int m){
    int i,j;
    x[n]=' ';
    for(i=n+1,j=0;j<m;i++,j++){        /*我这里思路是想在第一字符串的后面直接通过有效长度的数值将第二个字符串加上去*/
        x[i]=y[j];                    /*二楼分析正确,你跳过第一个结束符连接,所以显示不正常,红色代码为修改部分*/
    }
    x[i]='\0';
}

能编个毛线衣吗?
2015-04-01 05:27
琼羽
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2015-3-24
收藏
得分:0 
函数参数应使用指针,这样才能改变主函数中字符串的值。
2015-04-01 07:30
渣渣渣
Rank: 2
等 级:论坛游民
帖 子:26
专家分:17
注 册:2015-3-23
收藏
得分:0 
其实你可以直接用strcat的方法实现
例如将str2连接到str1上,可以直接写
strcat(str1,str2);
puts(str1);
2015-04-01 08:53
heso
Rank: 2
等 级:论坛游民
帖 子:20
专家分:39
注 册:2015-3-15
收藏
得分:1 
3楼5楼说的对 具体代码修改如下
/*8.6写一函数,将两个字符串连接起来。*/

#include<stdio.h>
#include<string.h>
int main(void){
    void cat(char *x,char *y,int n,int m);
    char a[30];
    char b[30];
    int i;
    int j;
    printf("请输入第一个字符串:\n");
    gets(a);
    i=strlen(a);
    printf("请输入第二个字符串:\n");
    gets(b);
    j=strlen(b);
    cat(a,b,i,j);
    printf("将它们连接起来为:\n");
    puts(a);
    return 0;
}
void cat(char *x,char *y,int n,int m)
{
    int i,j;
    *(x+n)=' ';
    for(i=n+1,j=0;j<m;j++,i++)
        *(x+i)=*(y+j);
    *(x+i)='\0';
}
一起学习,望交流、
2015-04-01 09:39
凡尘缘
Rank: 1
等 级:新手上路
帖 子:9
专家分:5
注 册:2015-3-25
收藏
得分:0 
瞅了一会,思路理解了。
2015-04-01 10:06
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>

const int MAX_LENGTH = 99;

int my_gets(char str[], int maxLength);
int my_puts(const char str[], int maxLength);
char* my_strcat(char s1[], char s2[], int maxLength);

int main(void)
{
    char str1[MAX_LENGTH + 1], str2[MAX_LENGTH + 1];

    my_gets(str1, MAX_LENGTH);
    my_gets(str2, MAX_LENGTH);

    putchar('\n');
    my_puts(my_strcat(str1, str2, MAX_LENGTH), MAX_LENGTH);
    putchar('\n');

    my_puts("\nPress ENTER to continue...", MAX_LENGTH);
    fflush(stdin);
    getchar();
    return EXIT_SUCCESS;
}

int my_gets(char str[], int maxLength)
{
    int count;
    int ch = '\0';

    for (count = 0; (count < maxLength) && (ch != EOF) && (ch != '\n'); ++count)
    {
        if ((ch = getchar()) != EOF)
        {
            str[count] = ch;
        }
    }
    if (count < maxLength)
    {
        --count;
    }
    str[count] = '\0';

    return count;
}

int my_puts(const char str[], int maxLength)
{
    int count;

    for (count = 0; (str[count] != '\0') && (count < maxLength); ++count)
    {
        putchar(str[count]);
    }

    return count;
}

char* my_strcat(char s1[], char s2[], int maxLength)
{
    int count;
    int index;

    for (count = 0; (count < maxLength) && (s1[count] != '\0'); ++count)
    {
        ;
    }
    if (count < maxLength)
    {
        index = 0;
        while ((count < maxLength) && (s2[index] != '\0'))
        {
            s1[count++] = s2[index++];
        }
    }
    s1[count] = '\0';

    return s1;
}



授人以渔,不授人以鱼。
2015-04-01 11:30
执笔画江山
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:265
专家分:1010
注 册:2015-1-13
收藏
得分:1 
我也来凑凑热闹
程序代码:
#include<stdio.h>
int main()

 {
     char str1[256];
     char str2[128];
     int count1 = 0;
     int count2 = 0;
     gets(str1);
     gets(str2);
     while(str1[count1])
         count1 ++;
     while(str2[count2])
         count2 ++;
     if(sizeof(str1) < count1 + count2 + 1)
         printf("Error\n");
     else
     {
         count2 = 0;
         while(str2[count2])
             str1[count1 ++] = str2[count2 ++];
         str1[count1] = '\0';
         printf("str1 = %s\n",str1);
     }
     return 0;

 }

授人以鱼,不如授人以渔
2015-04-01 11:40
快速回复:深夜求解,被困扰1个多小时了。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.087230 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved