| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1141 人关注过本帖
标题:字符串的左旋问题
只看楼主 加入收藏
笨笨echo
Rank: 1
等 级:新手上路
帖 子:21
专家分:2
注 册:2012-7-28
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:16 
字符串的左旋问题
键盘输入一个字符串,然后再输入一个数,按这个数把字符串分成两部分然后对调输出,并且改变原来的字符串的顺序。
搜索更多相关主题的帖子: 键盘 字符串 
2012-07-28 20:07
nanicesky
Rank: 2
来 自:元外元
等 级:论坛游民
帖 子:31
专家分:76
注 册:2012-1-20
收藏
得分:0 
我刚刚写了一个,没有实现改变原来字符串的顺序,只是做了一个字符交换:
程序代码:
#include<stdio.h>
#include<string.h>

int main(void)
{
    char str1[128], str2[128];
    int i, j, num, lenth;

    printf("Please input the string:\n");
    gets(str1);

loop:
    printf("Please input a number:\n");
    scanf("%d", &num);

    lenth = strlen(str1);

    if (num > lenth || num < 0)
    {
        printf("Input error, please input again!");
        goto loop;
    }
    else
    {
        for (i = 0, j = lenth - num; i < num; i++, j++)
        {
            str2[j] = str1[i];
        }

        for (i = num, j = 0; i < lenth; i++, j++)
        {
            str2[j] = str1[i];
        }
    }
    str2[lenth] = '\0';

    printf("The result string is:\n");
    puts(str2);

    return 0;
}


[ 本帖最后由 nanicesky 于 2012-7-28 22:13 编辑 ]
2012-07-28 22:10
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
楼主的问题在哪?

My life is brilliant
2012-07-28 22:20
nanicesky
Rank: 2
来 自:元外元
等 级:论坛游民
帖 子:31
专家分:76
注 册:2012-1-20
收藏
得分:0 
回复 3楼 lz1091914999
貌似是伸手党
2012-07-28 22:56
笨笨echo
Rank: 1
等 级:新手上路
帖 子:21
专家分:2
注 册:2012-7-28
收藏
得分:0 
回复 楼主 笨笨echo
多谢朋友的答案,但是现在的编程用goto的不是越来越少,而且现在的主流不是也不提倡用goto吗?
2012-07-29 08:46
笨笨echo
Rank: 1
等 级:新手上路
帖 子:21
专家分:2
注 册:2012-7-28
收藏
得分:0 
回复 2楼 nanicesky
我是想把一个字符串分成两部分然后在旋转,接到一起,这样就可以即改变了字符串的顺序又达到了要求的效果,但是…我不会实现。没能成功的写出来
2012-07-29 08:52
LShang
Rank: 4
来 自:China
等 级:业余侠客
威 望:3
帖 子:183
专家分:258
注 册:2010-12-24
收藏
得分:0 
不懂意思,是分成两部分后,第二部分逆序然后接到第一部分前边?
另外楼主一个代码没敲上来,很有伸手党的嫌疑

学如逆水行舟,不进则退
士不可以不弘毅,任重而道远
2012-07-29 10:23
鱼∞鱼
Rank: 2
等 级:论坛游民
帖 子:31
专家分:67
注 册:2012-6-5
收藏
得分:10 
#include <stdio.h>
#include<string.h>
int main()
{char c,a[100],b[100];
int i,j,n,k=0,t;

printf("请输入一个字符串:\n");
scanf("%s",a);
printf("请输入一个整数n:");
scanf("%d",&n);
j=strlen(a);
t=j;
for(i=n;i<j;i++)
{b[k]=a[i];
k++;}
k=0;
for(i=n-1;i>=0;i--)

{c=a[i];
a[i]=a[j-1];
a[j-1]=c;
j--;}

for(i=0;i<t-n;i++)
{if(a[i]!=b[k])
{for(j=i+1;j<t-n;j++)
{if(a[j]==b[k])
{c=a[i];
a[i]=a[j];
a[j]=c;}
}
}
k++;}
printf("调换后的字符串为:\n");
puts(a);}

VC下已运行通过  连字符串都改变了

[ 本帖最后由 鱼∞鱼 于 2012-7-29 11:48 编辑 ]
2012-07-29 11:33
小糊涂神c30
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:198
专家分:809
注 册:2012-4-25
收藏
得分:0 
不太明白题意,是不是把字符串分成两部分,然后对两部分分别排序,排好序之后再把两个字符串连接起来···楼主是这样吗?
2012-07-29 12:34
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:5 
左旋?是这个效果?
程序代码:
#include<stdio.h>
#include<malloc.h>
#include<string.h>

char * str_shift(char * s, int shift_length)
{
    int str_length;
    char * t;
   
    str_length = strlen(s);
    shift_length %= str_length;
    if(shift_length == 0) return s;
   
    t = (char *)malloc(str_length + 1);
    strcpy(t, s);
    strcpy(s, t + shift_length);
    t[shift_length] = '\0';
    strcat(s, t);
    free(t);
    return s;
}

int main()
{
    char s[1024];
    int i;
    scanf("%s%d", s, &i);
    puts(str_shift(s, i));
    return 0;
}


重剑无锋,大巧不工
2012-07-29 17:53
快速回复:字符串的左旋问题
数据加载中...
 
   



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

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