| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3600 人关注过本帖
标题:怎么解决这个烫烫烫
只看楼主 加入收藏
l1294315957
Rank: 1
等 级:新手上路
帖 子:15
专家分:2
注 册:2015-3-12
结帖率:80%
收藏
已结贴  问题点数:20 回复次数:8 
怎么解决这个烫烫烫
#include<conio.h>
#include<stdio.h>
#include<string.h>
void fun(char*w,int n)
{
    int i,j;
    char str[100];
    i=0;j=0;
    while(i<=n-1)
        i++;
    while(i>=n&&i<100)
    {
        
        str[i-n]=w[i];
        i++;
    }
    for(i=0;i<=n-1;i++)
    {
        str[strlen(w)-n+i]=w[i];
        j++;
    }
    for(i=strlen(w);i<100;i++)                 /*    在这里写出字符串的结束标志*/
        if(str[i]=='\0')
            *(w+i)='\0';


    i=0;
    while(i<100)
    {

        w[i]=str[i];
        i++;
    }
}
main()
{
    char s[100];
    int m;
    printf("Input string:");
    scanf("%s",s);
    printf("Input m:");
    scanf("%d",&m);
    fun(s,m);
    printf("After move:%s\n",s);
    getch();
}
搜索更多相关主题的帖子: include 字符串 
2015-06-25 08:26
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:5 
告诉别人,
a. 你这段代码想完成什么功能?
b. 你运行时输入什么?
2015-06-25 09:15
sun4742002716
Rank: 2
等 级:论坛游民
帖 子:16
专家分:16
注 册:2008-11-30
收藏
得分:5 
char str[100];
这句后面加一句
memset(str,'\0',100);
i=0;j=0;
.
.
.
.
.
.
2015-06-25 14:35
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:5 
烫烫烫啊屯屯屯

梦想拥有一台龙芯3A-4000
2015-06-25 15:17
l1294315957
Rank: 1
等 级:新手上路
帖 子:15
专家分:2
注 册:2015-3-12
收藏
得分:0 
回复 2楼 rjsp
4. (选做) 在 main 函数中从键盘上输入一个字符串 str 以及一个整数 n,将它们作为参数 传递给函数 fun。fun 函数的功能是将字符串 str 的第 0~m-1 个字符移到字符串的最后,第 m 个字符到最后一个字符移动字符串的头部。例如: 输入:ABCDEFGHIJK 3 输出:DEFGHIJKABC
2015-06-25 15:29
l1294315957
Rank: 1
等 级:新手上路
帖 子:15
专家分:2
注 册:2015-3-12
收藏
得分:0 
回复 3楼 sun4742002716
大神啊,学会一个新的东西memset(str,'\0',100);多谢大神
2015-06-25 15:33
lhfwl
Rank: 2
等 级:论坛游民
帖 子:4
专家分:12
注 册:2015-6-25
收藏
得分:5 
#include <conio.h>
#include <stdio.h>
#include <string.h>
void fun(char*w,int n)
{
    int i,j;
    char str[100];
    memset(str,0,sizeof(str));
    i=0;j=0;
    while(i<=n-1)
        i++;
    while(i>=n&&i<strlen(w))
    {
        
        str[i-n]=w[i];
        i++;
    }
    for(i=0;i<=n-1;i++)
    {
        str[strlen(w)-n+i]=w[i];
        j++;
    }
    for(i=strlen(w);i<100;i++)                 /*    在这里写出字符串的结束标志*/
        if(str[i]=='\0')
            *(w+i)='\0';


    i=0;
    while(i<100)
    {

        w[i]=str[i];
        i++;
    }
}
main()
{
    char s[100];
    int m;
    printf("Input string:");
    scanf("%s",s);
    printf("Input m:");
    scanf("%d",&m);
    fun(s,m);
    printf("After move:%s\n",s);
    getch();
}
改了两个地方,一个是添加了memset,另一个是第12行的长度更改了,不要对空字符串做过多的工作!
2015-06-25 15:57
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
以下是引用l1294315957在2015-6-25 15:29:14的发言:

4. (选做) 在 main 函数中从键盘上输入一个字符串 str 以及一个整数 n,将它们作为参数 传递给函数 fun。fun 函数的功能是将字符串 str 的第 0~m-1 个字符移到字符串的最后,第 m 个字符到最后一个字符移动字符串的头部。例如: 输入:ABCDEFGHIJK 3 输出:DEFGHIJKABC
我说两点吧,
第一,根据你的算法而言,你的代码写得很烂。如果是我,我会这么写:
#include <stdio.h>
#include <string.h>

void shiftleft( char* s, int n )
{
    char temp[100];

    size_t len = strlen(s);
    for( size_t i=0; i!=len; ++i )
        temp[(i+len-n)%len] = s[i];
    for( size_t i=0; i!=len; ++i )
        s[i] = temp[i];
}
int main( void )
{
    char s[] = "ABCDEFGHIJK";
    shiftleft( s, 3 );
    printf( "%s\n",s );

    return 0;
}

第二,你的算法本身就是错了,因为你开辟了一个char[100]作为临时交换场所,告诉我为什么不是99或101,而是100?
当然,你可以用 malloc 来动态分配内存,但是这不是题作者所欲考核你的内容,因为根本就不需要开辟一个临时数组作为交换。
给你两个算法提示吧:
第一种,将 ABC DEFGHIJK 要分离的两部分反序一下,得 CBA KJIHGFED,然后再整体反序一下,得 DEFGHIJK ABC,这就得到了结果。
这个算法的特点是 代码好写,但效率不高;
第二种,同样以 ABC DEFGHIJK 为例,总长11,左移3,11和3的最大公约数是1,那么将开头的“最大公约数”个字符,依次循环后移,……。(说得比较简单,因为我已经下班了。以上两个算法在C++中都有,函数名字是std::rotate,对应列表类使用第一种算法,对应数组类使用第二种算法,自己去看看代码就行了。)
2015-06-25 16:36
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:0 
“从键盘上输入一个字符串”,嘿嘿……

梦想拥有一台龙芯3A-4000
2015-06-25 18:51
快速回复:怎么解决这个烫烫烫
数据加载中...
 
   



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

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