#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define SIZE 40
struct Word
{
char originalString [SIZE]; //原始字符串
char copyString [SIZE]; //拷贝字符串
struct Word *next;
};
struct Word* Creat (struct Word *word_head);
char * inputString ();
void display (struct Word *word_head);
void clearMemory (struct Word *word_head);
int main (void)
{
Word *word_head = NULL;
puts ("\t\t\t统计英文单词长度:");
puts ("请输入英文单词:\n输入空行则结束输入!");
word_head = Creat (word_head);
puts ("统计结果:");
display (word_head);
puts ("释放内存");
clearMemory (word_head);
return 0;
}
struct Word* Creat (struct Word *word_head)
{
Word *word_previous = NULL;
Word *word_before = NULL;
unsigned int length = 0;
unsigned int originalNum = 0;
while (1)
{
word_previous = (struct Word *) malloc (sizeof (Word)); //申请内存
if (word_head == NULL)
word_head = word_previous; //保存首结点
else
word_before->next = word_previous; //将当前结构体指针域设置为上一结构体指针域
word_previous->next = NULL; //初始化当前结构体指针域
strcpy (word_previous->originalString, inputString()); //复制字符串
if (strlen (word_previous->originalString ) == 0)
{
if (originalNum == 0)
{
free (word_head); //释放内存
word_head = NULL; //重置头指针
}
else
{
free (word_previous); //释放内存
word_previous = NULL; //重置当前结构体
word_before->next = NULL; //重置上一结构体指针域
}
break;
}
strcpy (word_previous->copyString , word_previous->originalString );
originalNum ++; //计算单词数量
word_before = word_previous; //保存当前结构体地址
}
return word_head;
}
char * inputString ()
{
static char originalString [SIZE];
gets (originalString);
return originalString;
}
void displayNumber (struct Word *word_head)
{
unsigned int length = 0;
while (word_head != NULL)
{
for (length = 0; length < strlen (word_head->copyString ); length++)
printf ("*");
word_head = word_head->next ;
printf ("\n");
}
}
void clearMemory (struct Word *word_head )
{
Word *word_previous = NULL;
while (word_head != NULL)
{
word_previous = word_head;
word_head = word_head->next ;
free (word_previous);
}
word_previous = NULL;
}
#include <string.h>
#include <stdlib.h>
#define SIZE 40
struct Word
{
char originalString [SIZE]; //原始字符串
char copyString [SIZE]; //拷贝字符串
struct Word *next;
};
struct Word* Creat (struct Word *word_head);
char * inputString ();
void display (struct Word *word_head);
void clearMemory (struct Word *word_head);
int main (void)
{
Word *word_head = NULL;
puts ("\t\t\t统计英文单词长度:");
puts ("请输入英文单词:\n输入空行则结束输入!");
word_head = Creat (word_head);
puts ("统计结果:");
display (word_head);
puts ("释放内存");
clearMemory (word_head);
return 0;
}
struct Word* Creat (struct Word *word_head)
{
Word *word_previous = NULL;
Word *word_before = NULL;
unsigned int length = 0;
unsigned int originalNum = 0;
while (1)
{
word_previous = (struct Word *) malloc (sizeof (Word)); //申请内存
if (word_head == NULL)
word_head = word_previous; //保存首结点
else
word_before->next = word_previous; //将当前结构体指针域设置为上一结构体指针域
word_previous->next = NULL; //初始化当前结构体指针域
strcpy (word_previous->originalString, inputString()); //复制字符串
if (strlen (word_previous->originalString ) == 0)
{
if (originalNum == 0)
{
free (word_head); //释放内存
word_head = NULL; //重置头指针
}
else
{
free (word_previous); //释放内存
word_previous = NULL; //重置当前结构体
word_before->next = NULL; //重置上一结构体指针域
}
break;
}
strcpy (word_previous->copyString , word_previous->originalString );
originalNum ++; //计算单词数量
word_before = word_previous; //保存当前结构体地址
}
return word_head;
}
char * inputString ()
{
static char originalString [SIZE];
gets (originalString);
return originalString;
}
void displayNumber (struct Word *word_head)
{
unsigned int length = 0;
while (word_head != NULL)
{
for (length = 0; length < strlen (word_head->copyString ); length++)
printf ("*");
word_head = word_head->next ;
printf ("\n");
}
}
void clearMemory (struct Word *word_head )
{
Word *word_previous = NULL;
while (word_head != NULL)
{
word_previous = word_head;
word_head = word_head->next ;
free (word_previous);
}
word_previous = NULL;
}