一级目录
二级目录
三级目录
习题
实验课oj
1 找出最长的单词
问题 A: 高级语言程序设计实验5-1
题目描述
在进行文章重复度检查时,经常需要统计一段英文中的单词数量,并找出长度最长的单词。
设有如下定义:char str[500];
编写程序,通过利用cin.getline(str,500);实现从键盘输入一小段英文(其中可以包含空格,但在同一行),利用函数统计该段英文中包含几个单词,输出统计出的单词数量、最长单词的长度以及长度最长的单词,空格隔开。
注意:函数声明使用void split(char *str);如果有最长的单词不只一个,输出最先找到的那个。
输入
一小段英文,不要超过500个字符
输出
单词数量、最长单词的长度以及长度最长的单词,空格隔开。
样例输入 Copy
welcome to china university of mining and technology
样例输出 Copy
8 10 university
学长的代码:
#include<iostream>
using namespace std;
void split(char *str)
{
int num_word=0;
int temp=0,maxlen=0,maxwhere=0;
for(int i=0;str[i]!='\0';i++)
{
if(str[i+1]=='\0'&&str[i]>='a'&&str[i]<='z') str[i+1]=' ';
if(str[i]==' ')
{
num_word++;
if(temp>maxlen)
{
maxlen=temp;
maxwhere=i-temp;
temp=0;
}
else temp=0;
}
else
{
temp++;
}
}
cout << num_word << " " << maxlen << " ";
while(str[maxwhere]!=' ') cout << str[maxwhere++];
}
int main()
{
char str[500];
cin.getline(str,500);
split(str);
return 0;
}
2-动态创建二维数组并用指针转置
题目描述
编程序,按如下方法求A矩阵的转置矩阵B:输入两个正整数m和n,而后通过使用指针配合new运算符生成一个m行n列的二维动态数组A以及另一个n行m列的二维动态数组B,之后为A输入数据(A矩阵数据),逐行逐列输入,进而求出其转置矩阵B(即将A中的行存放成B中的列)并输出结果,逐行逐列输出,每一行数字占一行,同一行的数空格隔开。
注意:输入保证全是整数。
输入
输入m和n,逐行逐列输入数组A的数据
输出
逐行逐列输出矩阵B
样例输入 Copy
3 2
119 65
629 679
721 564
样例输出 Copy
119 629 721
65 679 564
抄的答案,还没看
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int m, n;
cin>>m>>n;
int ** A=new int*[m];
int ** B=new int*[n];
for (int i=0; i<m; ++i)
A[i]=new int[n];
for (int i=0; i<n; ++i)
B[i]=new int[m];
for(int i=0;i<m;++i)
for (int j=0; j<n; ++j)
{
cin>>A[i][j];
B[j][i]=A[i][j];
}
cout<<"A:"<<endl;;
for (int i=0; i<m; ++i) //m
{
for (int j=0; j<n; ++j) //n
{
cout<<A[i][j]<<" ";
}
cout<<endl;
}
cout<<endl<<"B:"<<endl;;
for (int i=0; i<n; ++i) //n
{
for (int j=0; j<m; ++j) //m
{
cout<<B[i][j]<<" ";
}
cout<<endl;
}
for (int i=0; i<m; ++i)
{
delete[] A[i];
}
for (int i=0; i<n; ++i)
{
delete[] B[i];
}
delete[] A;
delete[] B;
return 0;
}
mooc
1:插入字符
1插入字符串(30分)
题目内容:
从键盘输入一个字符串,并在串中的第一次出现的最大元素后边插入字符串”ab”。
输入格式:
任意输入一个字符串
输出格式:
在串中的最大元素后边插入字符串”ab”
输入样例:
123csCUMT
输出样例:
123csabCUMT
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string.h>
#include <math.h>
using namespace std;
int main ()
{
char a[20];
char b[20];
cin.getline(a,20);
int i=0,g=0;
char temp=a[0];
int add=0;
for(;a[i]!='\0';i++)
{
if(temp<a[i])
{
temp=a[i];
add=i;
}
}
for(i=0;i<=add;i++,g++)
{
b[g]=a[i];
}
b[g++]='a';
b[g++]='b';
for(;a[i]!='\0';i++,g++)
{
b[g]=a[i];
}
cout<<b;
return 0;
}
2:统计整数个数并输出
输入一个字符串,其包括数字和非数字字符,如:a123x456 17935? 098tab,将其中连续的数字作为一个整数,依次存放到数组a中,统计共有多少个整数,并输出这些数。
输入格式:
数字和非数字字符的字符串
输出格式:
1)整数个数2)分别输出整数
输入样例:
a123x456 17935? 098tab583【注意需要保留带有空格的字符串,请不要使用gets,cin,练习使用cin.getline(char *str, int maxnum)】
输出样例:
5
123
456
17935
98
583
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string.h>
#include <math.h>
using namespace std;
int main ()
{
char a[200];
char a1[200];
int num=0;
cin.getline(a,200);
int i=0,g=0;
for(;a[i]!='\0';i++)
{
if(a[i]>='0'&&a[i]<='9')
{
while(a[i]>='0'&&a[i]<='9')
{
a1[g]=a[i];
i++;
g++;
}
a1[g]='\n';
g++;//之前这里忘记g++;结果覆盖掉了'\n'
num++;
}
}
a1[g-1]='\0';
if(strlen(a1)!=0)
cout<<num<<'\n';
cout<<a1;
return 0;
}
3: 5个字符串用指针数组排序
3字符串排序(30分)
题目内容:
有5个字符串,首先将它们按照字符串中字符个数由小到大排序,再分别取出每个字符串的第三个字母合并成一个新的字符串输出(若少于三个字符的输出空格)。要求:利用字符串指针和指针数组实现。
输入格式:
5个字符串,用回车分隔
输出格式:
输出一个字符串:按5个字符串中字符个数由小到大排序,每个字符串后面有一个空格;再分别取出每个字符串的第三个字母合并成一个新的字符串输出,若少于三个字符的输出空格
输入样例:
test1234
123test
cumt
think
apples
输出样例:
cumt think apples 123test test1234
concatenate string:mip3s
方法1:用string* p[5]
方法2:用char* p[];
方法3:用char (*p)[30]
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string.h>
#include <math.h>
using namespace std;
int main ()
{
string s[5];
string* p[5];
for(int i=0;i<5;i++)
{
cin>>s[i];
p[i]=&s[i];
}
int max=0;
for(int i=0;i<4;i++)
{
for(int e=0;e<4-i;e++)
{
if((*p[e]).size()>(*p[e+1]).size())
{
string* tem=p[e];
p[e]=p[e+1];
p[e+1]=tem;
}
}
}
cout << endl << "concatenate string:";
for(int i=0;i<5;i++)
{
// cout<<*p[i]<<" ";
if((*p[i]).size()<3)cout<<' ';
else
{
cout<<(*p[i])[2]<<" ";
}
}
return 0;
}
方法二:
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char *ch[5];
for(int i=0;i<5;i++)
{
ch[i]=new char[10];
cin>>ch[i];
}
for(int i=0;i<4;i++)
for(int j=0;j<4-i;j++)
{
if(strlen(ch[j])>strlen(ch[j+1]))
{
char *p=ch[j];
ch[j]=ch[j+1];
ch[j+1]=p;
}
}
for (int i=0;i<5;i++) cout<<ch[i]<<" ";
cout << endl << "concatenate string:";
for(int i=0;i<5;i++)
{
if(strlen(ch[i])<3) cout<<" ";
else cout<<ch[i][2];
delete ch[i];
}
return 0;
}
方法三:
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string.h>
#include <math.h>
using namespace std;
int main ()
{
char s[5][30];
char*p [5];
for(int i=0;i<5;i++)
{
cin>>s[i];
p[i]=s[i];
}
for(int i=0;i<4;i++)
{
for(int e=0;e<4-i;e++)
{
if(strlen(p[e])>strlen(p[e+1]))
{
char *tem=p[e];
p[e]=p[e+1];
p[e+1]=tem;
}
}
}
cout << endl << "concatenate string:";
for(int i=0;i<5;i++)
{
if(strlen(p[i])<3)
cout<<" ";
else
{
cout<<p[i][2];
}
}
return 0;
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201223085901477.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2tlZW5rZW5lbg==,size_16,color_FFFFFF,t_70#pic_center)
改成
```cpp
cout<<(*p[1]).size;
就对了
(是优先级结合性的隐患造成的)