逻辑问题?
查看原帖
逻辑问题?
301765
ElfOfEra楼主2020/8/18 07:27

这是代码

#include<iostream>
#include<cstring>
using namespace std;
string sentence,keyword;
string cutsentence[1000000];
int main(){
    getline(cin,keyword); //读入数据
    getline(cin,sentence);
    for(int i=0;i<=keyword.size();i++){
        if(keyword[i]>='A'&&keyword[i]<='Z'){
            keyword[i]+=32; //小写转换
        }
    }
    for(int i=0;i<=sentence.size();i++){
        if(sentence[i]>='A'&&sentence[i]<='Z'){
            sentence[i]+=32; //小写转换
        }
    }
    int blkflag=0; //blkflag:空格数量,反推单词数
    for(int i=0;i<=sentence.size();i++){
        if(sentence[i]==' '){
            blkflag++; //标记空格数量
        }
    }
    int cutnum=blkflag+1,cutflag=0; //cutnum:单词切片数量 cutflag:切片起始点位置
    for(int i=0;i<=cutnum;i++){
        for(int j=cutflag;j<=sentence.size();j++){ //从起始点开始对
            if(sentence[j]==' '){ //划定范围
                for(int k=0;k<j;k++){ //确保在0<k<j范围内复制
                    cutsentence[i][k]=sentence[k]; //大数组->小数组
                }
                cutflag++; //复制完把起始点调到空格后面的字母
                break; //退出本轮循环
            }
        }
    }
    int firstflag=0,sameflag=0,lencut,samewordflag=0;
    for(int i=0;i<=cutnum;i++){ //以切片数为界限循环
        for(int k=0;k<sentence.size();k++){ //开足检测空间
            if(cutsentence[i][k]=='\0'){ //检测到大数组中有无数据终止符时记录循环数k
                lencut=k-1; //统计本轮切片长度
            }
        }
        if(lencut==keyword.size()){ //检测切片长度是否与关键字长度相同
            for(int k=0;k<=sentence.size();k++){ //开足检测空间
                if(cutsentence[i][k]==keyword[k]){ //如果大数组记录数据与关键字某一字符相同
                    sameflag++; //等位相同字符数
                }
            }
        }
        if(sameflag==lencut){ //若完全相同
            samewordflag++; //单词相同数+1
            if(firstflag==0){ //如果没有第一次出现的标识
                firstflag=i; //将当前切片数(从0开始)设为第一次出现的标识
            }else break; //如果标识过则从头开始循环
        }
    }
    if(samewordflag!=0){ //如果有相同的单词出现
        cout<<samewordflag<<" "<<firstflag<<endl; //输出相同个数与初次出现的标识点
    }else if(samewordflag==0){ //如果一个相同的也没有
        cout<<"-1"<<endl; //输出"-1"
    }
    return 0; //结束
}

这是问题

测试的时候发现大数组向小数组的复制失败,debug的时候复制数组什么也没有

恳求各位指点迷津

2020/8/18 07:27
加载中...