安徽科技学院 信网学院网络文化节 刘庞

#include<bits/stdc++.h>
using namespace std;
struct sentence{//定义一个结构体用于句子中单词的排序和存储
char word[20];//存储句子中的单词
int number;//将句子中的单词按第一次出现的顺序编号
}a[1000];
bool mycmp(sentence &m,sentence &n){//定义排序函数
return m.number<=n.number;
}
int main(){
system(“color b”);//将系统文字颜色转化为自己喜欢的颜色
cout<<">欢迎您的使用<"<<endl;
char s[10000];
cout<<“请输入一段句子或者字符:\n”;
gets(s);
int l=strlen(s);
cout<<"\t\t操作序号"<<endl;
cout<<"\t\t±---------------------------------------+"<<endl;
cout<<"\t\t| 1、输出段落中的不同单词出现次数 |"<<endl;
cout<<"\t\t| 2、输出26个字母在段落中出现的次数 |"<<endl;
cout<<"\t\t| 3、输出0~9字符在段落中出现的次数 |"<<endl;
cout<<"\t\t| 4、查找输入单词在文中第一次出现的位置 |"<<endl;
cout<<"\t\t| 5、退出程序 |"<<endl;
cout<<"\t\t±---------------------------------------+"<<endl;
cout<<"\t\t******************************************"<<endl;
int v;
cout<<“请您选择1-5:”;
while(~scanf("%d",&v)){
if(v1){
int k1=0,n=0;
for(int i=0;i<l;i++){
if(islower(s[i]))s[i]=toupper(s[i]);//将句子中的字母全部转化为大写
}
for(int i=0;i<l;i++){
if(isalpha(s[i]))a[k1].word[n++]=s[i];
else if(!isalpha(s[i])&&isalpha(s[i+1])){
n=0;k1++;
}
}
a[0].number=1;//将第一个单词编号为1
int x=2;
for(int i=1;i<=k1;i++)a[i].number=0;
for(int i=1;i<=k1;i++){
int flag1=0;
for(int j=0;j<i;j++){
if(strcmp(a[i].word,a[j].word)0){
a[i].number=a[j].number;//如果前面该单词不是第一次出现,则它的编号为第一次出现赋值的值
flag1=1;
break;
}
}
if(flag1
0){
a[i].number=x;//如果是第一出现的话,则赋值为x,并把x++;
x++;
}
}
sort(a,a+k1+1,mycmp);//按单词在段落中出现的先后顺序排序
int ans=1;
for(int i=0;i<k1;i++){
if(strcmp(a[i].word,a[i+1].word)!=0){
cout<<a[i].word<<":";
for(int i=0;i<ans;i++)cout<<"";//该单词出现了多少次就输出多少个
cout<<ans<<endl;
ans=1;
}
else ans++;
}
int o=1;
for(int i=k1;i>=0;i–){
if(strcmp(a[i].word,a[i-1].word)!=0){
cout<<a[i].word<<":";
for(int i=0;i<o;i++)cout<<"*";
cout<<o<<endl;
break;
}
else o++;
}
printf("\n");
cout<<“请您选择1-5:”;
}
if(v
2){
char alpha[26];
int k2=0;
int sum[26]={0};//用于存储各个字母出现的次数
for(int i=‘a’;i<=‘z’;i++)alpha[k2++]=i;
for(int i=0;i<l;i++)if(isupper(s[i]))s[i]=tolower(s[i]);
char *p=s;//定义指针
while(*p){
for(int j=0;j<26;j++){
if(*palpha[j]){
sum[j]++;
}
}
p++;//往右移
}
for(int i=0;i<26;i++){
cout<<“字母 “<<alpha[i]<<” 出现的次数为:”<<sum[i]<<endl;
}
printf("\n");
cout<<“请您选择1-5:”;
}
if(v
3){
int sum[10]={0};
char *p=s;
while(*p){
for(int i=0;i<=9;i++){
if(*p-'0’i)sum[i]++;
}
p++;
}
for(int i=0;i<10;i++){
cout<<“数字 “<<i<<” 出现的次数为:”<<sum[i]<<endl;
}
printf("\n");
cout<<“请您选择1-5:”;
}
if(v
4){
char x[20];
cout<<“请输入你想要查找的单词:”;
cin>>x;
for(int i=0;i<l;i++)if(isupper(s[i]))s[i]=tolower(s[i]);
int k3=0,q=0;
char b[1000][20];
for(int i=0;i<l;i++){
if(isalpha(s[i]))b[k3][q++]=s[i];
else if(!isalpha(s[i])&&isalpha(s[i+1])){
q=0;k3++;
}
}
int flag2=0;
for(int i=0;i<=k3;i++){
if(strcmp(b[i],x)0){
cout<<“您所要查找的单词在文中第”<<i+1<<“个单词处第一次出现”<<endl;
flag2=1;
break;
}
}
if(flag2
0)cout<<“文中没有您所要查找的单词!”<<endl;
printf("\n");
cout<<“请您选择1-5:”;
}
if(v==5){
cout<<“感谢您的使用!”<<endl;
cout<<“再见!”<<endl;
break;
}
if(v<=0||v>=6){
cout<<“请输入数字1-5中的一个!”<<endl;
cout<<endl;
cout<<“请您选择1-5:”;
}
}
return 0;
}

单词、字符统计查找系统代码说明
出于对编程的兴趣,在家一直没有放松对c/c++的学习。在这篇代码中我运用了结构体、数组、函数、字符串、指针和循环结构等等c/c++基本知识。
在我代码中main函数的开始,我用了system(“color b”)将系统的文字颜色转化为我喜欢的蓝色。这里的color 后面的字符为十六进制数0-F,一个数字代表一种颜色。
首先结构体就是一个可以包含不同数据类型的结构,它是一种可以自己定义的数据类型。而数组只是用于存储数据或者字符,结构体和数组主要有两点不同,第一结构体可以在一个结构中声明不同的数据类型,
第二相同结构的结构体变量是可以相互赋值的,而数组是做不到的,因为数组是单一数据类型的数据集合,它本身不是数据类型(而结构体是)。我在我的这篇代码中定义了结构体用于储存一句话中的单词以及将
单词在文章中第一次出现的先后顺序进行编号,再写一个排序的函数,到mian函数中调用写的这个排序函数直接将单词按文中第一次出现的顺序进行排序然后输出。
数组是个好东西,它可以存储一个固定大小的相同类型的元素的顺序集合。它可以将我们所输入比较大的数据或者字符储存起来,使我们使用数据更加的方便,比如利用sort函数进行排序的时候就须要用到的就
是数组。
字符串是c/c++中非常重要的一个知识点。在我的代码中运用了大量的字符串来处理数据。其中strcmp(s1,s2)函数用于判断两个字符串是否相等,相等方慧志为0,s1<s2返回值为-1,否则返回值为1。
Strlen()函数用于判断char类型字符串的长度。Isdigit()函数用于判断某一字符是否为数字,isalpha()函数用于判断字符是否为字母,isupper()和islower()函数分别用于判断字母是大写还是小写。
其中的toupper()函数用于将字母转化为大写,tolower()用于将字母转化为小写。
在我的代码中多次使用if…else语句判断条件是否为ture,虽然我的代码中没有使用条件语句,但是其实条件语句和if…else使用起来是一样的,比如c?a:b,这一句条件语句的意思就是如果c为真,则计算a的值,
否则则计算b的值,使用起来非常的方便,但是特别要注意问好和冒号的位置。
c++的指针可以简化编程任务的执行。指针是一个变量,其值为另一个变量的地址。使用指针的时候通常用于进行下列操作:定义一个指针变量,把变量地址赋值给指针,访问指针变量中可变地址的值。
我在代码中运用了while循环和for循环,循环语句允许我们多次执行一个语句或语句组。在循环过程中也有着控制语句,比如break语句的作用为终止循环,continue语句用于引起循环跳过主体的剩余
部分,立即重新开始测试条件。
由于疫情的原因,我们这学期的c++没有上,但是我在不能放松对c++的学习,我会在假期继续抽出时间来学习c++,不断提高自己写代码的水平。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值