【問題描述】:輸入一頁文字,可進行簡單編輯和統計。
【功能要求】:
1)、存盤一頁文章,最多N行,80列
2)、統計其中字母、數字、空格的數目和全文的字數
3)、實作某一字串的大小寫字母切換
4)、實作字串查找和替換功能
#include<stdio.h>#include <string.h>typedef struct line { char *data; struct line *next;}LINE;void PrintfWord(LINE *head){ LINE *p=head; int j=0; int length=strlen(p->data); for(int i=0;i<=length;i++) { printf("%c",p->data); j++; if(j%80==0) printf("\n"); }}void create(LINE *head){ printf("請輸入一頁文章:\n"); LINE *p=new LINE; head=p; int length=strlen(p->data); for(int i=0;i<=length;i++) { scanf("%c",&p->data); if(length>80) { printf("每行最多輸入80個字符\n"); break; } p->next=NULL; head=head->next; }}int NumWord(LINE *head){ LINE *p=head; int i; char ch; int length=strlen(p->data); int NumWord; ch=p->data[i]; while((ch!='\0')&&(length<80)) { for(i=0;i<=length;i++) { ch=p->data[i]; if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) NumWord++; } } return NumWord;}int Number(LINE *head){ LINE *p=head; int i; char ch; int length=strlen(p->data); int Number; ch=p->data[i]; while((ch!='\0')&&(length<80)) { for(i=0;i<=length;i++) { ch=p->data[i]; if(ch>='0'&&ch<='9') Number++; } } return Number;}int NumSpace(LINE *head){ LINE *p=head; int i; char ch; int length=strlen(p->data); int NumSpace; ch=p->data[i]; while((ch!='\0')&&(length<80)) { for(i=0;i<=length;i++) { ch=p->data[i]; if(ch==32) NumSpace++; } } return NumSpace;}int Count(LINE *head){ LINE *p=head; int length=strlen(p->data); return length;}int SearchWord(LINE *head,char *str){ LINE *p=head; int count=0; char ch; int length=strlen(p->data); while(ch!='\0') { for(int i=0;i<=length;i++) { if((ch=*str)&&(ch!='\0')&&(*str!='\0')) { ch++; *str++; } else if(*str=='\0') { count++; } } return count; }}int DeleteWord(LINE *head,char *ch){ LINE *p=head; char c; char c1; int length=strlen(p->data); for(int i=0;i<=length;i++) { char c=p->data[i]; if(c!=*ch) c1=c; } return c1; PrintfWord(head);}void main(){ LINE *head; create(head); PrintfWord(head); printf("\n"); printf("文章中英文字母個數:%d\n",NumWord(head)); printf("文章中數字個數:%d\n",Number(head)); printf("文章中空格個數:%d\n",NumSpace(head)); printf("文章中總字數個數:%d\n",Count(head)); char str[20]; printf("請輸入您要統計的字串:\n"); scanf("%s",str); printf("該字串在文章中出現的次數:%d\n",SearchWord(head,str)); char ch[20]; printf("請輸入您要洗掉的字串:\n"); scanf("%s",ch); printf("洗掉指定字串后的文章:\n",DeleteWord(head,ch));}
uj5u.com熱心網友回復:
在最后加一句等待陳述句
system("pause");
uj5u.com熱心網友回復:
還是不行哎 運行不出來
uj5u.com熱心網友回復:
這一坨讓人怎么看啊
你們老師給你出題,印成這個效果,你啥心情啊
主函式第一個呼叫的函式create就有了問題
Line * head;
Create(head);
這種寫法就是錯!!!
head在這里是野指標,沒有分配記憶體也沒有指向現有的資料, 即便Create當中為它賦值也帶不函式, 就是個廢物引數, 除了能在函式體里面當個臨時變數用用,其他毫無價值;
起碼要改成類似如下的形式:
Line * Create() {
head = (Line*) malloc( sizeof(Line));
.....
return head;
}
int main() {
Line * head = Create();
}
其他沒法看, 這一坨看起來太難了, 自己擼順了,再貼代碼給人看
uj5u.com熱心網友回復:
#include<stdio.h>
#include <string.h>
#include<stdlib.h>
typedef struct list
{ char *data;
struct list *next;}
LinkList;
void PrintfWord(LinkList *head)
{ LinkList *p=head;
int j=0;
int length=strlen(p->data);
for(int i=0;i<=length;i++)
{ printf("%c",p->data[i]);
j++;
if(j%80==0)
printf("\n"); }}
void create(LinkList *head)
{ printf("請輸入一頁文章,輸入^結束:\n");
LinkList *p=new LinkList;
head=p;
char ch;
int length=0;
p->next =(LinkList*)malloc(sizeof(LinkList));
for(int i=0;i<80;i++)
{ scanf("%c",&ch);
p->data[i]=ch;
length++;
if(length>80)
{
printf("每行最多輸入80個字符\n");
break;
}
else if(ch=='^')
{
p->next=NULL;
break;
}
p=p->next;
PrintfWord(head); }}
int NumWord(LinkList *head)
{
LinkList *p=head;
int i;
char ch;
int length=strlen(p->data);
int NumWord;
while((ch!='\0')&&(length<80))
{
for(i=0;i<=length;i++)
{
ch=p->data[i];
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) NumWord++;
} }
return NumWord;}
int Number(LinkList *head)
{ LinkList *p=head;
int i;
char ch;
int length=strlen(p->data);
int Number;
while((ch!='\0')&&(length<80))
{ for(i=0;i<=length;i++)
{ ch=p->data[i];
if(ch>='0'&&ch<='9')
Number++; } }
return Number;
}
int NumSpace(LinkList *head)
{ LinkList *p=head;
int i;
char ch;
int length=strlen(p->data);
int NumSpace;
while((ch!='\0')&&(length<80))
{ for(i=0;i<=length;i++)
{ ch=p->data[i];
if(ch==32)
NumSpace++; } }
return NumSpace;
}
int Count(LinkList *head)
{ LinkList *p=head;
int length=strlen(p->data);
return length;
}
int SearchWord(LinkList *head,char *str)
{ LinkList *p=head;
int count=0;
char ch;
int length=strlen(p->data);
while(ch!='\0')
{ for(int i=0;i<=length;i++)
{ ch=p->data[i];
if((ch=*str)&&(ch!='\0')&&(*str!='\0'))
{ ch++; *str++; }
else if(*str=='\0')
{ count++; } }
return count;
}}
int DeleteWord(LinkList *head,char *ch)
{ LinkList *p=head;
char c;
char c1;
int length=strlen(p->data);
for(int i=0;i<=length;i++)
{ c=p->data[i]; if(c!=*ch) c1=c; }
return c1;
}
void main(){ LinkList *head; create(head); PrintfWord(head); printf("\n"); printf("文章中英文字母個數:%d\n",NumWord(head));
printf("文章中數字個數:%d\n",Number(head)); printf("文章中空格個數:%d\n",NumSpace(head)); printf("文章中總字數個數:%d\n",Count(head));
char str[20];
printf("請輸入您要統計的字串:\n");
scanf("%s",str);
printf("該字串在文章中出現的次數:%d\n",SearchWord(head,str));
char ch[20];
printf("請輸入您要洗掉的字串:\n");
scanf("%s",ch);
printf("洗掉后的文章:%s\n",DeleteWord(head,ch));
}
uj5u.com熱心網友回復:
您能幫我改一下么?我有點著急 不知道怎么改了 謝謝!!
uj5u.com熱心網友回復:
#include<stdio.h>#include <string.h>
#include<stdlib.h>
#define LINEWIDTH 80
typedef struct list
{
int nLen; // 本段的char數, 頭結點的nLen表示段落總數
char *data; // 本段的字符
struct list *next; // 下一段
} LinkList;
// 用帶有空頭的鏈表表示一篇文章,
// LINEWIDTH個字符一行,輸出文章
void PrintfWord(LinkList *head)
{
LinkList *p = head->next;
while ( p ) {
int length=(int)strlen(p->data);
for(int i=0; i<length; i++)
{
printf("%c",p->data[i]);
if(LINEWIDTH-1 == i%LINEWIDTH)
printf("\n");
}
if ( 0 != length%LINEWIDTH ) printf("\n");
p = p->next;
}
}
//
// 從鍵盤輸入一篇文章,多段,每段不要超過5000個字符
LinkList * create()
{
printf("請輸入一頁文章,每短不超過5000字符,輸入^結束:\n");
LinkList *head, *p;
head = p = new LinkList;;
head->data = NULL;
head->next = NULL;// 帶空頭等鏈表
int nLines = 0; // 文章的行數,也是段落數
int length=0; // 每行的char數
char buffer[5120]={0};
gets(buffer);
length = (int )strlen(buffer);
while ( length>1 && buffer[0]!= '^') {
++ nLines;
// 查找字串當中是否包含^,如果有則截斷后面的字符
char * pC = strchr(buffer, '^');
if ( pC) *pC = '\0';
p->next = new LinkList;
p = p->next; p->next = NULL;
p->data = new char[length];
strcpy(p->data, buffer);
p->nLen = length;
if ( pC ) break;
gets(buffer);
length = (int) strlen(buffer);
}
head->nLen = nLines;
return head;
}
// 統計文章當中的字符數a~z || A~Z
int NumWord(LinkList *head)
{
if ( NULL == head || NULL == head->next )
return 0;
LinkList *p=head->next;
int NumWord=0;
while (p ) {
for (int i=0; i<p->nLen; ++i) {
if ( (p->data[i]>='a' && p->data[i]<='z') || \
(p->data[i]>='A' && p->data[i]<='Z'))
++NumWord;
}
p = p->next;
}
return NumWord;
}
int Number(LinkList *head)
{
if ( NULL == head || NULL == head->next )
return 0;
LinkList *p=head->next;
int Number=0;
while (p ) {
for (int i=0; i<p->nLen; ++i) {
if ( (p->data[i]>='0' && p->data[i]<='9'))
++Number;
}
p = p->next;
}
return Number;
}
int NumSpace(LinkList *head)
{
if ( NULL == head || NULL == head->next )
return 0;
LinkList *p=head->next;
int NumSpace=0;
while (p ) {
for (int i=0; i<p->nLen; ++i) {
if ( ' ' == p->data[i] )
++NumSpace;
}
p = p->next;
}
return NumSpace;
}
int Count(LinkList *head)
{
if ( NULL == head || NULL == head->next )
return 0;
LinkList *p=head->next;
int length=0;
while (p ) {
length += p->nLen;
p = p->next;
}
return length;
}
int SearchWord(LinkList *head,char *str)
{
if ( NULL == head || NULL == head->next )
return 0;
LinkList *p=head->next;
int count=0;
while (p ) {
char *pT = strstr(p->data, str);
while (pT) {
++count;
pT = strstr(pT+strlen(str), str);
}
p = p->next;
}
return count;
}
// 回傳的是洗掉的字串次數
int DeleteWord(LinkList *head,char *str)
{
if ( NULL == head || NULL == head->next )
return 0;
LinkList *p=head->next;
int count=0;
while (p ) {
char *pT = strstr(p->data, str);
while (pT) {
++count;
strcpy(pT, pT+strlen(str));
pT = strstr(pT, str);
}
p->nLen = (int)strlen(p->data);
p = p->next;
}
return count;
}
int main(){
LinkList *head = create();
PrintfWord(head);
printf("\n");
printf("文章中英文字母個數:%d\n",NumWord(head));
printf("文章中數字個數:%d\n",Number(head));
printf("文章中空格個數:%d\n",NumSpace(head));
printf("文章中總字數個數:%d\n",Count(head));
char str[20];
printf("請輸入您要統計的字串:\n");
scanf("%s",str);
printf("該字串在文章中出現的次數: %d\n", \
SearchWord(head,str));
char ch[20];
printf("請輸入您要洗掉的字串:\n");
scanf("%s",ch);
DeleteWord(head, ch);
printf("洗掉后的文章:\n");
PrintfWord(head);
return 0;
}
uj5u.com熱心網友回復:
程式好像還是運行不了
uj5u.com熱心網友回復:
怎么運行不了了? 你輸入了什么測驗資料?uj5u.com熱心網友回復:
The end of one journey is always the beginning of another. Change is painful, and always comes with a cost. It hurts to bear those costs, but we can"t allow that to sway us. Tomorrow is a mystery; the only thing we can do is face it with resolve. We move forward, always forward and into what"s next. We make a choice, we act on that choice, and all that"s left is to live in hope.輸入了這個進去測驗 但是還是沒反應
uj5u.com熱心網友回復:
你輸入了^ 來作為結束了嗎不輸入^沒有結束標志,怎么統計啊?!!
uj5u.com熱心網友回復:
輸入了輸入了 也沒反應uj5u.com熱心網友回復:
輸入了輸入了 也沒反應
uj5u.com熱心網友回復:
截圖上來看。uj5u.com熱心網友回復:
好的好的 私信給您了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/130099.html
標籤:C++ 語言
上一篇:C++中通過函式來從鍵盤上輸入字串給字符指標賦值,但是它說不允許使用不完整的型別是怎么回事?#include <stdio.h>
下一篇:MATLAB的一個小問題
