以下是引用雪山的猫在2013-1-22 11:18:21的发言:
楼上的,我很感谢你们来围观,但我还是要说些件事:
第一,这不是题,是我自学时突发的想法。
第二,对于数组的定义,如:char[10],那你输入的字符只要在十以内,strlen[a]永远是等于10的。无法达到我列的例子上的效果。
第三,指针我有想过,但不知如何实现。所以才发帖求解答!!!
楼上的,我很感谢你们来围观,但我还是要说些件事:
第一,这不是题,是我自学时突发的想法。
第二,对于数组的定义,如: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; }