| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1067 人关注过本帖
标题:关于数组的题目,我觉得我的思路没错,但是肯定是莫个方面我没理解透,所以 ...
只看楼主 加入收藏
hsjjgm
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:106
专家分:189
注 册:2013-4-27
收藏
得分:0 
回复 7楼 AntorDragon
用i控制流程,start控制起点,学习了,谢谢版主
问个小问题,scanf_s("%80s", source_str, _countof(source_str)); 这是什么啊,scanf_s,_countof怎么查不到啊

我也模仿着写了一个,怎么无法输出呢,有空的话麻烦指教下,谢谢
#include<stdio.h>
#include<string.h>

const char * turnString(char * target, const * char source, unsigned int start);  //const我学您的,不过不是还很明白

void main()
{
    char target[80],source[80];
    unsigned int i;

    puts("putin string");
    gets(source);

    for(i = 0; i < strlen(source); i++)
    {
        printf("%s\n", turnString(target,source,i));   //这里咋输出不了呢
    }
}

const char * turnString(char * target, const char * source, unsigned int start)
{
    unsigned int index = start;
    unsigned int i = 0;

    while(source[start] != '\0')
        target[i++] = source[index++];

    index = 0;

    while(index < start)
        target[i++] = source[index++];
    target[i] = '\0';

    return target;
}
2013-06-02 20:05
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 11楼 hsjjgm
我用的是VS2012,那些带_s后缀的函数是新版VC建议采用的安全型函数,旧的函数不应再使用了,你如果用的是VC++6,用回旧的函数即可,根据意思自己变通,确实不必照抄,你的做法很好。你输出没结果,在gets()之后把source字符串用printf()输出来看看是否正确读入了数据,这样的调试手段是必须学会的。至于const,那只是修饰符,告诉编译器,这种指针所指向的数据不应被修改,那么编译器在编译时就会替我们检查是否有无意中修改了相关数据的代码,对C++来说,一旦在编译时确保了数据符合const的条件,编译出来的可执行代码会省掉嵌入某些运行时检查,提高执行速度(比如const的迭代器速度比普通的快),不妨积极使用,能省掉很多麻烦,只要按照逻辑需求设定即可,即数据真的不应被修改,就把它设定为const,编译器做检查比你自己检查可靠得多,特别是程序庞大起来的时候更是如此。

其实现在你可以看看那个turn()函数,target和source分开了,所以是一个有const,一个没有,编译器在编译时会检查有没有对source数据做修改的代码,有的话就会给警告,但实际上这个函数可以不这样设计,完全可以在一个字符串参数中做动作,即在原来的字符串中做修改,那么上面的使用方法就有所不同,可以省掉一个字符串的内存,只是那样就无法追踪到最早的字符串是怎样的而已,具体怎样设计,是看你后面的需求而定的,但不管怎样,剥离成函数比上面那些全部挤在一个代码段中的强得多,变动一下需求就知道哪种较轻松。

[ 本帖最后由 TonyDeng 于 2013-6-2 21:19 编辑 ]

授人以渔,不授人以鱼。
2013-06-02 20:39
wfoo
Rank: 3Rank: 3
等 级:论坛游侠
威 望:7
帖 子:120
专家分:134
注 册:2011-8-6
收藏
得分:0 
如果只要输出的话,这样也可以
程序代码:
#include <string.h>
#include <stdio.h>

int main (void)
{
  char buffer[2048];
  size_t len, i;

  scanf ("%s", buffer);
  len = strlen(buffer);

  for (i=1; i<len; ++i)
    printf ("%s%.*s\n", &buffer[i], (int)i, &buffer[0]);
  return 0;
}
2013-06-03 00:52
wsws23
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:105
专家分:107
注 册:2012-3-13
收藏
得分:0 
一次行输出
#include"iostream"
using namespace std ;
void OutA();
int main()
{
    OutA();
    return 0 ;
}
void OutA()
{
    char str[20] ;
    char temp[20];
    int i = 0 , n = 0 , k , j=0 , l;
    gets(str);
    while(str[i] != '\0')
    {
        i++;
        n++;
    }
    for(i = 0 ; i < n ; ++i)
    {
        for(k = i + 1 ,j = 0 ; k < n ; ++k,++j)
        {
            temp[j] = str[k] ;
        }
        for(l = 0 ; l <= i ; ++l)
        {
            temp[j + l] = str[l] ;
        }
        for(k = 0 ; k < n ; ++k)
        {
            cout<<temp[k];
        }
        cout<<" ";
        
    }
}
2013-06-03 10:13
hsjjgm
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:106
专家分:189
注 册:2013-4-27
收藏
得分:0 
回复 12楼 TonyDeng
谢谢版主,还要多加学习
2013-06-03 11:06
快速回复:关于数组的题目,我觉得我的思路没错,但是肯定是莫个方面我没理解透, ...
数据加载中...
 
   



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

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