| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 869 人关注过本帖
标题:原来字符串函数还可以这样玩
只看楼主 加入收藏
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
结帖率:99.25%
收藏
已结贴  问题点数:20 回复次数:5 
原来字符串函数还可以这样玩
这是一道大一新人的编程作业(目的是训练循环结构的应用),要求打印一个菱形,很经典吧(大神可以绕道)
图片附件: 游客没有浏览图片的权限,请 登录注册

学到后边,其实解决这题的方法有好几种,不光以控制循环变量为主体解决问题……只不过下面这种做法很新奇,拿出来给大家分享一下

用字符串函数打印一个菱形:目的是为了应用几个(说到底是三个而已)常用的字符串函数(还有些这题没有用)的用法和思维拓展——

为了让大家理解深刻(不懂的就去查书)就不写注释了

程序代码如下:

程序代码:
#include<stdio.h>
#include<string.h>
#define N 6
int main()
{
    char a[20]={""};
    char b[2]={" "};
    char *p=a;
    while (strlen(strcat(p,b))<N-1);
    p[strlen(p)]='*';
    while (strchr(p,' '))
    {
        printf("%s\n",p);
        *(strchr(p,'*')-1)='*';
        *strchr(p,'\0')='*';
    }
    while (strchr(p,'*'))
    {
        printf("%s\n",p);
        *strchr(p,'*')=' ';
        *(strchr(p,'\0')-1)='\0';
    }
}


这程序没有问题,只是觉得新奇拿出来给大家展示一下,顺便看看有什么分可以送。


搜索更多相关主题的帖子: 字符串 经典 拓展 
2016-11-04 15:58
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:4 
另类

DO IT YOURSELF !
2016-11-04 16:02
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:8 
简单的也可以这样
#include<stdio.h>
#define N 6
main()
{
    char *sz = "*************************";
    int i;
    for (i=0; i<N; i++)
        printf("%*.*s\n", i+N, 2*i+1, sz);
    for (i=N-2; i>=0; i--)
        printf("%*.*s\n", i+N, 2*i+1, sz);
}
2016-11-04 17:03
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 3楼 吹水佬
原来字符串和输出小数的原理一样
学习了

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-11-04 18:21
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
收藏
得分:8 
可否建立一个坐标,如果要输出一个对称的菱形,只要|x|+|y|小于等于N
以前一个帖子上看到的
#include<stdio.h>
#include<string.h>
#define juedui(x) ((x)>0?(x):(-x)) //求绝对值
#define N 6
main()
{
    int  i,j;
    for(i=-N;i<=N;i++)
    {
     for(j=-N;j<=N;j++)
      {
          if(juedui(i)+juedui(j)<=N) putchar('*');
          else putchar(' ');
      }
     putchar('\n');
    }
   
    return 0;
}

早知做人那么辛苦!  当初不应该下凡
2016-11-04 19:40
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 5楼 炎天
很好啊,该题做法越来越多样灵活了,这种算法也是比较优的,我只是抛砖引玉罢了

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-11-04 22:55
快速回复:原来字符串函数还可以这样玩
数据加载中...
 
   



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

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