A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© talent123 中级黑马   /  2015-6-4 09:02  /  1184 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

最近在别的书上找到一题:题目内容:
输入一个字符串和一个非负整数N,要求将字符串循环右移N次。

输入格式:
输入在第1行中给出一个字符串,以'#'表示结束,‘#’不是字符串的一部分,字符串的长度未知,但至少有一个字符;输入的第2行给出非负整数N。

输出格式:
在一行中输出循环右移N次后的字符串。

输入样例:
Hello World!#
2
输出样例:
d!Hello Worl

  1. #include <stdio.h>
  2. #include <string.h>
  3. int main(){
  4.         char str[10000];
  5.         gets(str);
  6.         printf("%d\n", strlen(str));
  7.         char *head, *p, *t;
  8.         head = p = str;
  9.         int number;
  10.         scanf("%d", &number);
  11.         t = p = p + (strlen(str) - number - 1);
  12.        
  13.         while (*p != '#'){
  14.                 printf("%c", *p);
  15.                 p++;
  16.         }
  17.         while (head != t){
  18.                 printf("%c", *head);
  19.                 head++;
  20.         }
  21.        
  22.         return 0;
  23. }
复制代码


我总感觉做的有点麻烦,大家给看看有没有什么优化的地方?或者你们有什么思路

5 个回复

倒序浏览
输入数字要取模 不然输入数字大于字符串长度这个程序就输出错误了,输出可以像这样循环也可以再复制一个这个字符串连接起来然后截取输出
回复 使用道具 举报
受教了      ,            
回复 使用道具 举报
晗修 发表于 2015-6-4 10:56
输入数字要取模 不然输入数字大于字符串长度这个程序就输出错误了,输出可以像这样循环也可以再复制一个这 ...

所以偷偷写了个10000
想来应该不会超过10000的
感觉有些浪费资源= =!
回复 使用道具 举报
又是初始化的问题。。。。
回复 使用道具 举报
围观学习啦,大家努力!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马