以下是引用雪山的猫在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;
}








