| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 503 人关注过本帖
标题:有错误但是我找不出来,可能是我概念不清,求教。
只看楼主 加入收藏
完梦之人
Rank: 1
等 级:新手上路
帖 子:14
专家分:2
注 册:2014-11-28
结帖率:80%
收藏
已结贴  问题点数:20 回复次数:9 
有错误但是我找不出来,可能是我概念不清,求教。
输入一行字符,例如:abcdefghij再输入一个数字m将m下标之后的与下表之前的调换后输出。这是我写的,怎么改。
#include <stdio.h>
#include <string.h>
void main()

{
    int i,j,m;
    char a[20],c[20];
    printf("yihangzifu:");
    gets(a);
    printf("m=");
    scanf("%d",&m);
    for(i=m;i<strlen(a);i++)
        for(j=0;j<m;j++)
            c[j]=a[i];
    for(i=0;i<m;i++)
        for(j=m+1;j<strlen(a);j++)
            c[j]=a[i];
        c[i+1]='\n';
    puts(c);
}
搜索更多相关主题的帖子: include 
2014-12-05 15:21
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:4 
不用玩那么多技巧,老老实实地复制、黏贴。把m下标之前和之后的两段字符集分别复制到外面,然后按要求填回去原来的字符数组空间中。

授人以渔,不授人以鱼。
2014-12-05 15:29
xiehou314159
Rank: 2
等 级:论坛游民
帖 子:35
专家分:86
注 册:2011-5-11
收藏
得分:2 
回复 2 楼 TonyDeng
T版,我发你的短消息看到了么,救我啊,3天了,还没解决
2014-12-05 15:32
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
想省交换空间,纯搞算法,没那么简单,你首先得判断m划分开的两截哪头大哪头小,最后写出来的代码比直接代码长得多、也复杂得多,而且代码所占用的内存并不比开辟数据交换空间要少(除非你要处理的字符串长得厉害厉害厉害厉害厉害厉害)。

授人以渔,不授人以鱼。
2014-12-05 15:34
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
以下是引用xiehou314159在2014-12-5 15:32:11的发言:

T版,我发你的短消息看到了么,救我啊,3天了,还没解决

短消息?OpenGL那个?我不懂OpenGL,帮不了你。

授人以渔,不授人以鱼。
2014-12-05 15:35
comewest
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:74
专家分:335
注 册:2014-12-3
收藏
得分:2 
//输入一行字符,例如:abcdefghij再输入一个数字m将m下标之后的与下表之前的调换后输出。
#include <stdio.h>
#include <string.h>
void main()

{
    int i,j,m;
    char a[20],c[20];
    printf("yihangzifu:");
    gets(a);
    printf("m=");
    scanf("%d",&m);
    for(i=0;i<strlen(a)-m;i++)
        c[i]=a[m+i];
    for(j=i;j<strlen(a);j++)
          c[j]=a[j-i];
        c[j]='\0';
    puts(c);
}

[ 本帖最后由 comewest 于 2014-12-5 15:54 编辑 ]
2014-12-05 15:40
comewest
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:74
专家分:335
注 册:2014-12-3
收藏
得分:2 
不用两重循环,按原数组a和新数组c的下标之间的关系即可解决。
其中i表示c中0~strlen(a)-m的下标,对应的是a中m~strlen(a)的下标;
其中j表示c中strlen(a)-m+1~strlen(a)的下标,对应的是a中0~m的下标;

[ 本帖最后由 comewest 于 2014-12-5 15:56 编辑 ]
2014-12-05 15:47
完梦之人
Rank: 1
等 级:新手上路
帖 子:14
专家分:2
注 册:2014-11-28
收藏
得分:0 
回复 7 楼 comewest
我也不知道为啥,老是把简单问题复杂化。
2014-12-05 15:51
comewest
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:74
专家分:335
注 册:2014-12-3
收藏
得分:4 
以下是引用完梦之人在2014-12-5 15:51:59的发言:

我也不知道为啥,老是把简单问题复杂化。



看我6楼的程序,没问题了。
2014-12-05 15:57
菜鸟砖家
Rank: 1
来 自:湖南
等 级:新手上路
帖 子:23
专家分:5
注 册:2014-12-5
收藏
得分:2 
回复 5 楼 TonyDeng
大哥,哥哥,帮帮我吧~~  c语言书第二天的程序清单,我检查了很久,不知道错在哪里,按照书上面的一模一样,叫修改的也修改了,就是编译不出来。  求求你了!

/* print_it.c-This program prints a listing with line numbers! */
#include <stdlib.h>
#include <stdio.h>

void do_heading(char *filename);

int line = 0, page = 0;

int main( int argv, char *argc[] )
{
    char buffer [256];
    FILE *fp;

    if( argv < 2 )
{
    fprintf(stderr, "\nproper usage is: " );
    fprintf(stderr, "\n\nprint_it filename.ext\n" );
    return(1);
}

    if (( fp = fopen( argc[1], "r" )) == NULL )
{
       fprintf( stderr, "Error opening file, %s!", argc[1]);
       return(1);
}

    page = 0;
    line = 1;
    do_heading( argc[1]);

    while( fgets(buffer, 256, fp ) != NULL )
{
      if( line % 55 == 0 )
        do_heading( argc[1] );

      fprintf( stdout, "%4d:\t%s", line++, buffer );
}

    fprintf( stdout, "\f" );
    fclose(fp);
    return 0;
}

void do_heading( char *filename )
{
    page++;

    if (page > 1)
      fprintf( stdout, "\f" );

    fprintf( stdout, "page: %d, %s\n\n", page, filename );
}

编出一片天下。
2014-12-05 19:40
快速回复:有错误但是我找不出来,可能是我概念不清,求教。
数据加载中...
 
   



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

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