| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2298 人关注过本帖
标题:这个GG的二维数组字符串连接,求问思路,来个思路
只看楼主 加入收藏
吕宏
Rank: 1
等 级:新手上路
帖 子:49
专家分:0
注 册:2016-4-12
结帖率:86.67%
收藏
已结贴  问题点数:20 回复次数:11 
这个GG的二维数组字符串连接,求问思路,来个思路
图片附件: 游客没有浏览图片的权限,请 登录注册

这是题目要求
我在网上查到了怎么进行两组数据的链接,但这道题目的话,不懂
怎么用法二维数组,
用二维数组怎么控制输入的数据组数
GG了啊
搜索更多相关主题的帖子: 字符串 网上 
2016-05-16 20:28
吕宏
Rank: 1
等 级:新手上路
帖 子:49
专家分:0
注 册:2016-4-12
收藏
得分:0 
回复 楼主 吕宏
图片附件: 游客没有浏览图片的权限,请 登录注册

我就想要这个样的,然而不会做
求个思路
2016-05-16 20:35
FacetiousGod
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2016-4-16
收藏
得分:0 

我也是初学者,不知道是不是这个意思?
程序代码:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n,i,j;
    scanf("%d",&n);
    char str[n][100];
    for(i=0;i<n+1;i++)
    gets(str[i]);
    for(i=0;i<n+1;i++)
    {
        j=0;
        while(str[i][j])
        printf("%c",str[i][j++]);
    }
    return 0;
}

2016-05-16 23:33
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
回复 3楼 FacetiousGod
你的二维数组定义有问题吧,n是一个变量,你定义的数组是个静态数组,必须固定数组长度的。如果你想定义动态数组,详见参考
http://baike.baidu.com/link?url=76WXG76gK5zm7s1AZwRfn0Fu3nTKnW0i2kGh9UlPEQ4XXkuQ202GbxUT9df8P4cbYHJiPv6iGeUiIe1cyl5Nuq
                                                                                                                --百度百科
2016-05-17 08:30
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:10 
你可以定义一个5行30列的静态的二维数组char a[5][30]; 用a[0][0]-a[0][30],来接受第一个字符串;a[1][0]-a[1][30]来接受第二个字符串;
a[2][0]-a[2][30]接受第三个字符串;如有多于三行的类似就可以了。
然后定义一个指针数组char (*p)[5];p=a;这样*p[0]=a[0][0];  *(p[0]+1)=a[0][1];   *p[1]=a[1][0]; *(p[1]+1)=a[1][1];.....后面类似
然后用for循环通过指针引用二维数组的各行各列的字符,将第二行的字符串挨个赋值给第一行字符串后就可以实现字符串连接了。要注意的是将后一个字符串连接到前一个字符串的时候,得先确定从前一个字符串的哪个位置开始(也就是要确定前一个字符串的长度)
2016-05-17 08:40
吕宏
Rank: 1
等 级:新手上路
帖 子:49
专家分:0
注 册:2016-4-12
收藏
得分:0 
回复 3楼 FacetiousGod
你的意思差不多,
但问题就在于不能人工控制数组的长度,他是固定的
2016-05-17 09:37
吕宏
Rank: 1
等 级:新手上路
帖 子:49
专家分:0
注 册:2016-4-12
收藏
得分:0 
回复 5楼 wanglianyi1
应该就是这样了吧,我试试吧
刚学数组指针
还不是太会用
2016-05-17 09:38
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
回复 6楼 吕宏
可以控制数组长度的啊,用动态数组,不过这题应该不至于这么麻烦。动态数组要自己申请内存,用完还要自己释放的。
你就定义稍微长一点的静态数组好了。我也在尝试写你这个程序,大概结构差不多了,有点毛病还在调试修改。编译没问题了,就是输出不太对。
有两个问题现在:1、每一行字符串输入后,貌似第一个字符就不见了,我在找原因。2、字符串连接的部分还没调试估计也有问题,你可以把这部分功能独立出来做个自定义函数,然后主函数调用,这样清楚点。我把半成品发给你参考看看。我再继续修改
我的问题主要在于回车要消除,再搞搞再说。你先看看
程序代码:
#include <stdio.h>
#include <string.h>
#include <windows.h>   //这个头文件暂时没用,不用管,准备最后实在不好消除回车,先用fflush(stdin);调试下用的,这个动作不太好,最好不用
#define M 30
#define N 30
int main()
{
    int i=0,j=0,k=0,m=M,n=0;        
    char arr[M][N];
    char (*p)[M];
    int num[N]={0}          //统计每行字符串的长度
    p=arr;
    printf("请输入要输入字符串的行数,该数字要小于%d:",m);
    do{
        scanf("%d",&n);
    }while(n>M);
    getchar();                    //吸收回车 
    for(i=0;i<n;i++)
    {
        printf("请输入第%d行字符串:\n",i+1);
        gets(p[i]);
        for(j=0;j<N;j++)        
        {            
            if(*(p[i]+j)='\n')
            {
                num[i]=j+1;            //统计每行字符串的长度 
                break;
            }    
            getchar();
        }      
        printf("第%d行字符串:",i+1);
        puts(p[i]);
    }
//     fflush(stdin);
  //进行n-1次连接 
    for(i=0;i<n;i++)
    { 
        for(j=num[i];j<N;j++)
        {
            k=0;
            *(p[k]+j+i)=*(p[k+i]+k);
            k++;
        }    
    }    
    puts(p[0]);
    return 0;
}


[此贴子已经被作者于2016-5-17 10:43编辑过]

2016-05-17 10:32
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
你就把arr[M][N]二维数组当M个N长度的一维数组用就差不多了
2016-05-17 10:39
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:10 
下面这段代码使用了strlen()和strcat()两个函数就能实现你的要求了,所以说明刚才的思路是可行的。代码存在的问题就出在判断每行字符串长度上,和连接字符串的动作上。主要在这个两个地方修改下就可以了。不过最后输出有一个乱码字符,也要最后再检查下哪出的问题。
程序代码:
#include <stdio.h>
#include <string.h>
#include <windows.h>
#define M 30
#define N 30
int main()
{
    int i=0,j=0,k=0,m=M,n=0;        
    char arr[M][N];
    char (*p)[M];
    int num[N]={0},sum=0;            //统计字符串的长度
    p=arr;
    int _exit=0; 
    do{    
        system("cls");
        printf("请输入要输入字符串的行数,该数字要小于%d:",m);
        do{
            scanf("%d",&n);
        }while(n>M);
        getchar();                    //吸收回车 
        for(i=0;i<n;i++)
        {
             printf("请输入第%d行字符串:\n",i+1);
            gets(p[i]);

    //判断每行字符串的长度    
/*        for(j=0;j<N;j++)        
        {            
            if(*(p[i]+j)='\0')
            {
                num[i]=j+1;            //统计每行字符串的长度 
                break;
            }                
        }      
*/
            num[i]=strlen(p[i]);
            printf("长度%d的第%d行字符串:",num[i],i+1);
            puts(p[i]);
        }

  //进行n-1次连接 
/*        for(i=0;i<n;i++)
        { 
            for(j=num[i];j<N;j++)
            {
                k=0;
                *(p[k]+j+i)=*(p[k+i]+k);
                k++;
            }    
        }    */
        for(i=0;i<n;i++)
        {
            strcat(p[i],p[i+1]);
            strcat(p[i],p[i+2]);
        }
    //统计连接后字符串总长度        
    //    for(k=0;k<n;k++)
    //        sum+=num[k];
    //输出连接后的字符串 
        puts(p[0]);
        printf("非0再次运行,0退出");
        scanf(" %d",&_exit);
        }while(_exit!=0);
    return 0;
}

图片附件: 游客没有浏览图片的权限,请 登录注册

每一行字符串输入后有个输出字符串是为了调试使用的。用完后直接注释掉或者删除点相关代码就可以了。

[此贴子已经被作者于2016-5-17 11:10编辑过]

2016-05-17 11:07
快速回复:这个GG的二维数组字符串连接,求问思路,来个思路
数据加载中...
 
   



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

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