| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1191 人关注过本帖
标题:有两道C语言的题不会。。。。
只看楼主 加入收藏
sophy123
Rank: 1
等 级:新手上路
帖 子:30
专家分:2
注 册:2011-5-8
结帖率:75%
收藏
 问题点数:0 回复次数:10 
有两道C语言的题不会。。。。
1.从键盘上读入一行字符(约定:字符数≤127字节),按以下方法将其加密变换:
    A->Z    a->z
    B->Y    b->y
    C->X    c->x
    ……    ……
    Z->A    z->a
  即字母A变成Z、字母B变成Y...,非字母字符不变。最后在屏幕上先显示这一行字符的长度,再显示生成的密文。
2.编写一程序实现以下功能:
  ①从键盘上先后读入两个字符串,假定存储在字符数组s1和s2中。注意,这两个字符串最长均可达到127个字符、最短均可为0个字符。
  ②将字符串s2插入字符串s1中,插入方法为:s2的第i个字符插入到原s1的第i个字符后,如果s2比s1(假定s1的长度为L1)长,则s2的第L1个字符开始到s2结尾的所有字符按在s2中的顺序放在新生成的s1后。提示,合并时可使用中间数组。例如:
    s1输入为"123456789",S2输入为"abcdefghijk",则输出的s1为:
       1a2b3c4d5e6f7g8h9ijk
  ③在屏幕上输出新生成的s1。
搜索更多相关主题的帖子: 字符串 C语言 键盘 
2011-05-18 21:58
sophy123
Rank: 1
等 级:新手上路
帖 子:30
专家分:2
注 册:2011-5-8
收藏
得分:0 
第一题自己写出来了,第二题想问问~
2011-05-18 22:25
sophy123
Rank: 1
等 级:新手上路
帖 子:30
专家分:2
注 册:2011-5-8
收藏
得分:0 
第一题自己写出来了,第二题想问问~
2011-05-18 22:25
方寸
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-5-18
收藏
得分:0 
先申请能容纳目标字符串的内存
然后
循环控制添加字符串.超出s2则memcpy
2011-05-18 22:46
qima8888
Rank: 2
等 级:论坛游民
帖 子:2
专家分:10
注 册:2011-5-18
收藏
得分:0 
#include <stdio.h>
#include <string.h>
#define N 127
int main()
{
    char a[N];
    char b[N];
    char c[N];
    int i;
    int k = 0;
    gets(a);
    gets(b);
    int length_a = strlen(a);
    int length_b = strlen(b);
    if(length_a == 0 && length_b != 0)
    {
        printf("new string:\n");
        puts(b);
    }
    else if(length_a != 0 && length_b == 0)
    {
        printf("new string:\n");
        puts(a);
    }
    else if(length_a != 0 && length_b != 0 )
    {
        if(length_a >= length_b)
        {
            for(i = 0; i < length_b;i++)
            {
                c[k] = a[i];
                c[k+1] = b[i];
                k = k + 2;
            }
            for(;i < length_a; i++)
            {
                c[k] = a[i];
                k = k + 1;
            }
        }
        else if(length_a <= length_b)
        {
            for(i = 0; i < length_a;i++)
            {
                c[k] = a[i];
                c[k+1] = b[i];
                k = k + 2;
            }
            for(;i < length_b; i++)
            {
                c[k] = b[i];
                k = k + 1;
            }
        }
        printf("put new string:\n");
        puts(c);
    }
}
2011-05-18 23:08
变幻小子
Rank: 6Rank: 6
来 自:广东陆丰
等 级:侠之大者
帖 子:188
专家分:473
注 册:2011-3-4
收藏
得分:0 
第一题可以用学生成绩分等级
来实现
第二题 还不会

明天的梦
2011-05-19 03:24
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:0 
1.
程序代码:
char a[200],b[200];
int i;
gets(a);
for(i=0;i<strlen(a);i++)
{if(a[i]>='A'&&a[i]<='Z')
{b[i]='Z'-a[i]+'A';}
else if(a[i]>='a'&&a[i]<='z')
{b[i]='z'-a[i]+'a';}
else b[i]=a[i];}
b[i]='\0';
printf("长度为:%d\n加密后的字符串为:",strlen(b));
puts(b);

2.
程序代码:
char a[200],b[200],c[400];
int i,j=0,m,n,x;
gets(a);
gets(b);
m=strlen(a);
n=strlen(b);
if(m<n)
{for(i=0;i<m;i++)
{c[j++]=a[i];
c[j++]=b[i];}
for(x=i;x<n;x++)
c[j++]=b[x];
c[j]='\0';
}
else
{for(i=0;i<n;i++)
{c[j++]=a[i];
c[j++]=b[i];}
for(x=i;x<m;x++)
c[j++]=a[x];
c[j]='\0';}
puts(c);

仅供参考!
2011-05-19 06:18
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:0 
回复 5楼 qima8888
char c[N];
你的这个东西会导致运行崩溃了!数组开辟的空间不够!

愿用余生致力编程
2011-05-19 13:01
jacksongod
Rank: 2
等 级:论坛游民
帖 子:32
专家分:82
注 册:2011-5-18
收藏
得分:0 
先用malloc开出足够的空间 malloc(sizeof(char)*(strlen(s1)+strlen(s2)+1));
2011-05-19 13:05
chenjin1st
Rank: 2
来 自:湖南
等 级:论坛游民
帖 子:26
专家分:44
注 册:2011-5-13
收藏
得分:0 
第一题是我以前做过的呵呵。比你的要难一点点。给你源代码,第二题我这就做  那位大哥能告诉怎么上图啊? 呵呵。
程序代码:
#include<stdio.h>
//#include<string.h>
int strleng(char str[]);
void main()
{                        // a 的ASCL是97 ,z的是122
  char str[20];
  int a,i;
  printf("请输入您要加密的字符\n");
  scanf("%s",str);
  printf("请输入偏移量!\n");
  scanf("%d",&a);
  for(i=0;i<strleng(str);i++){
   if(str[i]==120){ str[i]=97; continue;}
   if(str[i]==121){ str[i]=98; continue;}
   if(str[i]==122){ str[i]=99; continue;}
   str[i]=str[i]+a;
  }
  printf("%s\n",str);
}
/********************下面子函数的功能是求这个输入的字符串长度的大小*************************/
int strleng(char str[])
{
   int sum=0;
   char *p;
   p=str;
   while(*p!='\0'){
    *p++;
    sum++;
   }
   return sum;
}
/****************************************************************/

共同进步,共同收获!!!!
2011-05-19 13:14
快速回复:有两道C语言的题不会。。。。
数据加载中...
 
   



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

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