| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1031 人关注过本帖
标题:字符游戏
只看楼主 加入收藏
雪川飞舞
Rank: 2
等 级:论坛游民
帖 子:15
专家分:27
注 册:2009-9-4
收藏
得分:0 
输入字符串时以'#'结束。
/*这是我随便做的,有BUG的。*/

#include "stdio.h"
void main()
{
    int j,m;
    char a[100];
    printf("Please input m:");
    scanf("%d",&m);
    while(0!=m)
    {
    printf("\n");   
        scanf("%s",a);
        for(j=0;'#'!=a[j];j++)
    {
         if(' '!=a[j])
        {
            if('z'>=(a[j]+m))
            {
                a[j]=a[j]+m;
            }
            else
            {
            a[j]=a[j]+m-26;
            }
        }
    }
    puts(a);
    printf("\nPlease input m:");
        scanf("%d",&m);
    }
}
2011-01-08 12:29
xufan123
Rank: 5Rank: 5
等 级:职业侠客
帖 子:226
专家分:318
注 册:2010-11-15
收藏
得分:0 
#include<stdio.h>
#include<string.h>
void main()
{
    char ch[10][100];
    char temp;
    int a[10],t=0,i=0,j=0;
    for(;;i++)
    {
        scanf("%d",&a[i]);
        if(a[i]==0)
            break;
        scanf("%s",ch[i]);
        
    }
    t=i;
        
  for(i=0;i<t;i++)
    for(j=0;j<strlen(ch[i]);j++)
    {
        if(ch[i][j]<='z'&&ch[i][j]>='a')
        {
            temp=ch[i][j]+a[i];
        if(temp>'z')
            ch[i][j]=temp-26;
        else ch[i][j]=temp;
        }
        
    }
    for(i=0;i<t;i++)
        puts(ch[i]);
}
2011-01-08 14:08
a343637412
Rank: 7Rank: 7Rank: 7
来 自:そ ら
等 级:黑侠
帖 子:357
专家分:620
注 册:2010-9-26
收藏
得分:0 
#include<stdio.h>
#include<string.h>
int main()
{
    int i,m,n;
    char a[10000];
    while(scanf("%d",&m)!=EOF&&m)
    {
        getchar();
        gets(a);
        n=strlen(a);
        for(i=0;i<n;i++)
        {
            if(a[i]!=' ')
            {
                a[i]=a[i]+m;
                if(a[i]>'z')
                {
                    a[i]=a[i]-'z'+'a'-1;
                }                                    //默认只输入小写字符....
            }
        }
        printf("%s",a);
    }


return 0;
}

记得  给分哈
2011-01-08 14:10
xufan123
Rank: 5Rank: 5
等 级:职业侠客
帖 子:226
专家分:318
注 册:2010-11-15
收藏
得分:0 
#include<stdio.h>
#include<string.h>
void main()
{
    char ch[10][100];
    char temp;
    int a[10],t=0,i=0,j=0;
    for(;;i++)
    {
        scanf("%d",&a[i]);
        if(a[i]==0)
            break;
        getchar();
       gets(ch[i]);//这里改改 就可以了
        
    }
    t=i;
        
  for(i=0;i<t;i++)
    for(j=0;j<strlen(ch[i]);j++)
    {
        if(ch[i][j]<='z'&&ch[i][j]>='a')
        {
            temp=ch[i][j]+a[i];
        if(temp>'z')
            ch[i][j]=temp-26;
        else ch[i][j]=temp;
        }
        
    }
    for(i=0;i<t;i++)
        puts(ch[i]);
}
2011-01-08 15:15
点线面
Rank: 8Rank: 8
来 自:NO.-1
等 级:蝙蝠侠
帖 子:525
专家分:980
注 册:2011-1-3
收藏
得分:0 
最完整的程序
程序代码:
#include<stdio.h>

int main()
{
    const int  M=1000;
    char c[M];
    int i=0,m;

    do{
        do{
        puts("先输入一个正整数m ");
        scanf("%d",&m);

        }while(m>=10000);

     c[0]=getchar();
     m&&gets(c);

     for(i=0 ; c[i];i++)
     {
     
       if((c[i]-'a') * ('z'-c[i]) >= 0)    //你要象后移动多少位;然后输入要你要转化的的字符
           if(c[i]  + m%26 > 'z')
           c[i] = (c[i] + m%26) % 'z'+'a'-1;  //要考虑超出一个字母范围
           else
               c[i] += m%26;                //要考虑超出一个字母范围
     }
       m&&printf("输出: \n%s\n",c);
    }while (m);

    return 0;
}
PS:这里要考虑超出字母范围的情况


[ 本帖最后由 点线面 于 2011-1-8 15:55 编辑 ]

小代码,大智慧
2011-01-08 15:34
点线面
Rank: 8Rank: 8
来 自:NO.-1
等 级:蝙蝠侠
帖 子:525
专家分:980
注 册:2011-1-3
收藏
得分:0 
回复 13楼 a343637412
它要求除小写字母,其它字母不变,如果是小于'a'的字符,结果会出错,有几段写得不错

小代码,大智慧
2011-01-08 16:38
点线面
Rank: 8Rank: 8
来 自:NO.-1
等 级:蝙蝠侠
帖 子:525
专家分:980
注 册:2011-1-3
收藏
得分:0 
程序代码:
#include<stdio.h>

int main()
{
    const int  M=10000;
    char c[M];
    int i=0,m;

    do{
        puts("先输入一个正整数m ");
        m=0;
        if((( scanf("%d",&m)) != EOF)&&m<10000&&m>-1)
            //遇到一般异常会退出程序,不过不能处理带有数字开关的字符串
     {
       getchar();
       if(m){
        gets(c);       //遇到非正式的字符,还不能处理

               for(i=0; c[i] ;i++)
            {
              if((c[i] >= 'a') && ('z' >= c[i]))
               {
                  m = m%26;         // 为什么不用c[i] += m%26; 因为刚好进入负数的补码区域
                if(c[i]+m>'z')
               c[i] += 'a'-'z'-1+m;
                else
                    c[i] += m;
               }
            }

         printf("输出: \n%s\n",c);
         m=1;                      //处理26倍的余数
       }
     }

    }while (m);

    return 0;
}
改进上次的程序,不过程序还有BUG

小代码,大智慧
2011-01-08 17:26
快速回复:字符游戏
数据加载中...
 
   



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

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