文章编辑(数据结构/c语言)

【问题描述】:输入一页文字,可进行简单编辑和统计。【功能要求】:1)、存储一页文章,最多N行,80列2)、统计其中字母、数字、空格的数目和全文的字数3)、实现某一字符串的... 【问题描述】:输入一页文字,可进行简单编辑和统计。
【功能要求】:
1)、存储一页文章,最多N行,80列
2)、统计其中字母、数字、空格的数目和全文的字数
3)、实现某一字符串的大小写字母切换
4)、实现字符串查找和替换功能
展开
 我来答
自我编程
2019-01-02 · 科技优质答主
自我编程
采纳数:1481 获赞数:4290

向TA提问 私信TA
展开全部

代码测试,我只输入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 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
芮初rz
2019-01-02 · 超过10用户采纳过TA的回答
知道答主
回答量:765
采纳率:10%
帮助的人:60.9万
展开全部
酷我林肯落寞ill啊看累了啦啦啦啦快来啊的结局ill吧咯嗯咯哦哦啦啦啊吐了咯1好啦阿里啦咯啦咯托乐嘉阿肯OK了就咯估计垃圾1测来咯他咯啦咯啦咯啦咯啦咯解决吧了考虑他来咯哦哦监控来啦啦了啦咯啦咯啦咯考虑图啦啦啊loll就咯啦咯啦咯啦咯啦卡波till咯么恩佐看啦看困了额啦咯啦咯了来咯图兔兔KTV就咯啦咯啦咯啦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式