
文章编辑(数据结构/c语言)
【问题描述】:输入一页文字,可进行简单编辑和统计。【功能要求】:1)、存储一页文章,最多N行,80列2)、统计其中字母、数字、空格的数目和全文的字数3)、实现某一字符串的...
【问题描述】:输入一页文字,可进行简单编辑和统计。
【功能要求】:
1)、存储一页文章,最多N行,80列
2)、统计其中字母、数字、空格的数目和全文的字数
3)、实现某一字符串的大小写字母切换
4)、实现字符串查找和替换功能 展开
【功能要求】:
1)、存储一页文章,最多N行,80列
2)、统计其中字母、数字、空格的数目和全文的字数
3)、实现某一字符串的大小写字母切换
4)、实现字符串查找和替换功能 展开
2个回答
展开全部
代码测试,我只输入3行,10列。你把常量改成你需要的大小,比如10行80列
#define N 3 #define N 10
#define clo 10 改成 #define clo 80
输入支持跨行删除。(删除键和回车键不算字符录入,一行不满回车可换行,一行满自动换行)
查找替换,如果替换的字符数量不足,多余字符会删除,整个字符串会移位。
#include<stdio.h>
#include<conio.h>
#include<windows.h>
#include<string.h>
#define N 3
#define clo 10
void input(char strs[][clo]);
int printfStr(char strs[][clo]);//打印字符数组
char *findStr(char strs[][clo],char *str);//查找子字符串,返回起始地址
int th(char strs[][clo]);//查找并替换
int qh(char strs[][clo]);//查找并字母大小写反转
int main()
{
char strs[N][clo]={0};
input(strs);
qh(strs);
th(strs);
}
int th(char strs[][clo])//查找指定字符串并替换
{
int len1,len2,len=0,i,flag=0;
char str1[N*clo+1]={0},str2[N*clo+1]={0},*p1=NULL,*p2=NULL,*pBen=NULL,*pEnd=NULL;
printf("输入要找的字符串:(字数不等超过文章上限)\n");
scanf("%s",str1);
printf("输入要替换的字符串:(字数不超过查找字符串)\n");
scanf("%s",str2);
len1=strlen(str1),len2=strlen(str2);
if(len2>len1 && printf("要替换的字符串必须小于等于查找的字符串\n"))
return 0;
len1=strlen(str1);
p1=findStr(strs,str1);
if(!p1 && printf("未找到对应字符串!\n"))
return 0;
else
{
p2=str2;
for(i=0;i<len1;i++)
{
if(p2<=&str2[len2-1])
*p1=*p2;
else
{
flag=1;
if(!len)
len=len1-i;//替换多余的字符数量
if(!pBen)
pBen=p1+len;//替换位置后的字符串开始地址
}
p1++;
p2++;
}
if(flag)//如果替换字符较短,删除多余字符,并移位
{
pEnd=&strs[N-1][clo-1];
while(pEnd>=pBen)
{
*(pBen-len)=*pBen;
*pBen=0;
pBen++;
}
}
}
printf("替换后的文章:\n");
printfStr(strs);
return 1;
}
int qh(char strs[][clo])//查找指定字符串并大小写切换
{
int len,i;
char str[N*clo+1]={0},*p=NULL;
printf("输入要找的字符串,在文章中找到对应字符串并大小写字母切换:(字数不等超过文章上限)\n");
scanf("%s",str);
len=strlen(str);
p=findStr(strs,str);
if(!p && printf("未找到对应字符串!\n"))
return 0;
else
{
for(i=0;i<len;i++,p++)
if(*p>='a' && *p<='z')
*p-=32;
else if(*p>='A' && *p<='Z')
*p+=32;
}
printf("转换后的文章:\n");
printfStr(strs);
return 1;
}
char *findStr(char strs[][clo],char *str)//查找子字符串,返回起始地址
{
int len=strlen(str);
char *p1=&strs[0][0],*p1S=NULL,*p2=NULL;
if(len>N*clo)
return NULL;
while(1)
{
p2=str;
p1S=p1;
while(1)
{
if(*p2!=*p1S)
break;
if(p2==&str[len-1])
return p1;
if(p1S==&strs[N-1][clo-1])
return NULL;
p2++;
p1S++;
}
if(p1==&strs[N-1][clo-1])
break;
p1++;
}
return NULL;
}
void input(char strs[][clo])
{
char c;
int i,j,ncnt=0,zcnt=0,kcnt=0,cnt=0;
for(i=0;i<N;i++,printf("\n"))
{
for(j=0;j<clo;j++)
{
c=getch();
if(c=='\r')
break;
else
{
if((c>='a' && c<='z')||(c>='A' && c<='Z'))
zcnt++;
if(c>='0' && c<='9')
ncnt++;
if(c==' ')
kcnt++;
if(c==8 && &strs[i][j]>&strs[0][0])
{
if(j>0)
strs[i][j-1]=0,j-=2;
else if(j==0)
i--,j=clo-1,strs[i][j]=0,j--;
system("cls");
printfStr(strs);
cnt--;
}
strs[i][j]=c;
cnt++;
}
printf("%c",c);
}
}
printf(" 字母数:%d,数字数:%d,空格数:%d,全文数:%d\n",zcnt,ncnt,kcnt,cnt);
}
int printfStr(char strs[][clo])//打印字符数组
{
int i,j;
for(i=0;i<N;i++,printf("\n"))
{
for(j=0;j<clo;j++)
{
printf("%c",strs[i][j]);
if(strs[i][j]==0)
return 0;
}
}
return 0;
}

2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询