| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 751 人关注过本帖
标题:问下数组及字符串的输入!!望解答!
只看楼主 加入收藏
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9026
专家分:54030
注 册:2011-1-18
收藏
得分:10 
以下是引用雪山的猫在2013-1-22 11:18:21的发言:

楼上的,我很感谢你们来围观,但我还是要说些件事:
  第一,这不是题,是我自学时突发的想法。
  第二,对于数组的定义,如:char[10],那你输入的字符只要在十以内,strlen[a]永远是等于10的。无法达到我列的例子上的效果。
  第三,指针我有想过,但不知如何实现。所以才发帖求解答!!!

我似乎没有说错什么呀,而且亦无过激语气,我不知道你为什么表现得很委屈的样子。如果你觉得我在胡说,我可以写个Demo给你看看
这个Demo使用的是标准C语言,所以你需要用能支持标准C语言的编译器才可以编译,比如gcc(加编译参数-std=c99)等;而像TC、VC等非标准的东西,你就要改一下代码了,很简单的事
程序代码:
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <malloc.h>

struct StringNode
{
    char section[10];
    struct StringNode* next;
};
struct String
{
    struct StringNode* head;
    struct StringNode* back;
};
struct String StringCreate()
{
    struct String str;
    str.head = NULL;
    str.back = NULL;
    return str;
}
void StringDestroy( struct String* pstr )
{
    for( struct StringNode* p=pstr->head; p; )
    {
        struct StringNode* pnext = p->next;
        free( p );
        p = pnext;
    }
    pstr->head = NULL;
    pstr->back = NULL;
}
bool StringEnlarge( struct String* pstr )
{
    struct StringNode* p = malloc( sizeof(struct StringNode) );
    if( !p )
        return false;
    p->section[0] = '\0';
    p->next = NULL;

    if( pstr->back )
        pstr->back->next = p;
    else
        pstr->head = p;
    pstr->back = p;
    return true;
}

int main()
{
    struct String str = StringCreate();

    // 读入一行到str中
    for( char s[11]; fgets(s,11,stdin); )
    {
        size_t len = strlen(s);
        if( s[len-1] == '\n' )
            s[len-1] = '\0';

        StringEnlarge( &str );
        memcpy( str.back->section, s, sizeof(str.back->section) );

        if( len<10 || s[len-1]=='\0' )
            break;
    }

    // 输出str的长度
    {
        size_t len = 0;
        for( struct StringNode* p=str.head; p!=str.back; p=p->next )
            len += 10;
        len += strlen(str.back->section);
       

        printf( "length = %zu\n", len );
    }
    // 输出str的长度
    {
        for( struct StringNode* p=str.head; p!=str.back; p=p->next )
            printf( "%.10s", p->section );
        printf( "%s\n", str.back->section );
    }

    StringDestroy( &str );
    return 0;
}

2013-01-22 14:57
ren613
Rank: 3Rank: 3
来 自:宣武
等 级:论坛游侠
帖 子:117
专家分:120
注 册:2012-11-20
收藏
得分:0 
还是把数组搞大一点就好

天道酬勤
2013-01-22 15:18
黄昏黄昏
Rank: 2
等 级:论坛游民
帖 子:49
专家分:41
注 册:2013-1-10
收藏
得分:0 
可以用内存分配函数calloc或malloc,使用完后记得要用free释放内存。

得不到的永远在骚动,被偏爱都有恃无恐
2013-01-22 15:26
雪山的猫
Rank: 1
等 级:新手上路
帖 子:44
专家分:5
注 册:2012-12-23
收藏
得分:0 
谢谢大家。我已经学到了不少了!!c的路上以后我还会多多请教的!
2013-01-23 16:36
雪山的猫
Rank: 1
等 级:新手上路
帖 子:44
专家分:5
注 册:2012-12-23
收藏
得分:0 
回复 11楼 rjsp
其实我没那个意思,只是学术上的探究,或许语气用错了但请你多多见谅!在c的路上我们都是朋友。别放在心上,也谢谢你的代码!
2013-01-23 16:39
快速回复:问下数组及字符串的输入!!望解答!
数据加载中...
 
   



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

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