注册 登录
编程论坛 C语言论坛

指针求解

楚川杉 发布于 2020-03-11 23:48, 3471 次点击

只有本站会员才能查看附件,请 登录

这道题我想用指针来做,该怎么做呢?
11 回复
#2
八画小子2020-03-12 02:32
先把代码写出来
#3
rjsp2020-03-12 09:11
这道题我想用指针来做,该怎么做呢?
没听懂,怎么可能有什么算法是必须用指针的,否则没有指针的编程语言岂不是完成不了啦?

程序代码:
#include <stdio.h>

int main( void )
{
    unsigned n;
    scanf( "%u ", &n );

    for( char ch; ch=getchar(), ch>='a' && ch<='z'; )
        putchar( (ch-'a'+n)%26+'a' );
    putchar( '\n' );
}

#4
linux_qqlb2020-03-12 09:15
写个伪代码把

例如:
   char letters[50]={a~z};  
   char *pser=NULL;
   int  m;
   int n;
   输入 第一行 n
   第二行 几个字母
   将pser 移动到 letter的对应的地方  用for循环加计数的方法得到偏移 m
    pser=letter+m;
    pser=pser - n;
    *pser即对应的字母,注意 要有越界的判断,pser>p+49 ,pser要从0偏移位置开始计算,以免越界



   
   

   

   free(p);
   
#5
xianfajushi2020-03-12 09:47
指针很简单的,不过有时指针也很麻烦不靠谱,如:int aa = 4;string* a,a=new string[aa];a[0]="aaaaaaaaaaaaaaa";strlen((char*)&a[0]+3)得到的结果似有似无的。不过这题不会出现问题。
小写a~z字符的值从97-122用求余即可实现。
昨天刚好回了一个题目,正好可以稍加修改做这题目,:
只有本站会员才能查看附件,请 登录

有了上面一步,接着写下一步求余罗圈
只有本站会员才能查看附件,请 登录

准备好以上2步即可着手写指针处理函数了

    char aa[111]{}; int a = 0; cin >> aa >> a;
    输出移位字符(aa, a); cout << aa;

只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2020-3-12 11:13编辑过]

#6
lin51616782020-03-12 11:59
以下是引用xianfajushi在2020-3-12 09:47:37的发言:

你的实现有很多问题
1.
 a[j] - '\0' 这个减法 不知道是在做什么?
'\0' 就是 0
a[j] - 0 就是 a[j]
c = a[j]; 就完事了 多写一个减法不知道是在做什么?

2.
ends的使用也是 迷惑行为
ends是写入一个 '\0' 根本不是给cout 使用的参数




#7
叶纤2020-03-12 15:41
我也没发啥啊,我把刚刚的话复制一下
版主大大有无上的权利,作为平民的我们听着就行了,每一串代码都代表个人的思维,智慧的深奥的浅显的都有值得学习的地方,版主大大一般会写智慧的代码,给人带来灵感也会有育人的目的,这是我心中最完美的版主大大形象
( ps::  版主大大有无上的权利这句话的意思是能当上版主说明有他过人之处,为什么呢?因为版主大大的智慧都浓缩在代码里,不论是新手还是老手的代码,他们的思维都用代码体现,所以都值得学习,不过呢,版主的代码有育人的目的,给人灵感,所以作为新手的我们,听着就行,吸收有灵感的部分,取长补短  )
#8
自学的数学2020-03-12 16:49
程序代码:
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int main(){
    string s;
    int n,i,j;
    cin>>n;
    cin>>s;
    for(i=0;i<s.size();i++)
{
        for(j=1;j<=n;j++)
    {
        ++s[i];
        if(s[i]>'z')
        s[i]='a';
    }
}
cout<<s;
return 0;   
}
#9
叶纤2020-03-12 18:25
程序代码:

#include <stdio.h>
#include <stdlib.h>
int main(void)
{int n=0;int count=0;int i=0;
      char a[50];char b[50];
      scanf("%d",&n);   //不接受n
      scanf("%s",a);      
       for ( i=0;a[i];++i){
       b[i]=a[i]+n;
       if(b[i]>('z'))
       {b[i]=(char)(b[i]-26);}   
      printf("%c",b[i]);}
}


[此贴子已经被作者于2020-3-12 20:35编辑过]

#10
叶纤2020-03-12 20:25
程序代码:
//终于改对了
#include <stdio.h>
#include <stdlib.h>
int main(void)
{int n=0;int count=0;int i=0;
      char a[50];char b[50];
      scanf("%d",&n);   
      scanf("%s",a);      
       for ( i=0;a[i];++i){
       b[i]=a[i]+n;
       if(b[i]>('z'))
       {b[i]=(char)(b[i]-26);}   
      printf("%c",b[i]);}
}

#11
lin51616782020-03-12 21:08
程序代码:
#include <stdio.h>
int main(int argc, char *argv[])
{
    int n;
    scanf("%d ", &n);
    n %= 26;
    for(int ch = getchar(); ch != '\n'; ch = getchar())
    {
        ch += n;
        putchar(ch > 'z' ? ch - 26 : ch);
    }
    puts("");
    return 0;
}
#12
return_02020-03-25 20:25
回复 6楼 lin5161678
我个人认为这就是所谓“压行”,反正代码对了就对了,ide不行人家也是会改的
1