字符串逆序
题目描述
随机输入一个长度不超过255的字符串,将其倒置后输出。
输入
只有一行。(测试数据不含空格)
输出
只有一行,输出倒置后的字符串。
样例
输入复制
asdfghjkl123456
输出复制
654321lkjhgfdsa
解题思路:循环数组一半,对称位置交换
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char a[300];
cin.getline(a,300);
int n = strlen(a);
for(int i = 0;i<n/2;i++)
{
int j = n-1-i;
int t = a[i];
a[i] = a[j];
a[j] = t;
}
cout<<a;
return 0;
}
单词倒排
描述
编写程序,读入一行英文(只包含字母和空格,单词间以单个空格分隔),将所有单词的顺序倒排并输出,
依然以单个空格分隔。
输入
输入为一个字符串(字符串长度至多为100)。
输出
输出为按要求排序后的字符串。
解题思路:双指针向前扫描,遇到空格输出
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char a[300];
cin.getline(a,300);
int n = strlen(a);
int j = n;
for(int i = n-1;i>=0;i--)
{
if((a[i]!=' '&&a[i-1]==' ')||i==0)
{
for(int k = i;k<j;k++)
{
cout<<a[k];
}
j = i;
}
if(a[i]==' ')
{
cout<<" ";
j = i;
}
}
return 0;
}
首字母大写
描述
编写程序,读入一行英文(只包含字母和空格,单词间以单个空格分隔),将所有单词的首字母大写,依然
以单个空格分隔。
输入
输入为一个字符串(字符串长度至多为100)。
输出
输出为按要求排序后的字符串。
样例
输入复制
this is test code.
输出复制
This Is Test Code
解题思路:1、首字母大写 2、前一个字符如果是空格也大写
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char a[300];
cin.getline(a,300);
int n = strlen(a);
for(int i = 0;i<n;i++)
{
if(i==0||(a[i]!=' '&&a[i-1]==' '))
{
a[i] = a[i]-32;
}
}
cout<<a;
return 0;
}
统计句子中单词个数
描述
编写程序,读入一行英文(只包含字母和空格,单词间以单个或多个空格分隔),统计句子中单词的个数
输入
输入为一个字符串(字符串长度至多为100)。
输出
输出单词个数。
样例
输入复制
this is a test code.
输出复制
5
解题思路:1、非空格的后一位是空格或者\0,统计数+1
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char a[300];
int cnt;
cin.getline(a,300);
int n = strlen(a);
cnt = 0;
for(int i = 0;i<n;i++)
{
if(a[i]!=' '&&a[i+1]==' ')
{
cnt++;
}
}
cout<<cnt;
return 0;
}
最长单词
描述
编写程序,读入一行英文(只包含字母和空格,单词间以单个或多个空格分隔),输出最长的单词
输入
输入为一个字符串(字符串长度至多为100)。
输出
输出最长的单词,如果有多个,输出第一个。
样例
输入复制
this is a test programme code.
输出复制
programme
解题思路:数组连续性问题,记录最长单词的起始位置,及长度,然后输出
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char a[300];
int cnt;
int max,maxi;
cin.getline(a,300);
int n = strlen(a);
cnt = 0;
max = 0;
for(int i = 0;i<n;i++)
{
if(a[i]!=' ')
{
cnt++;
if(cnt>max)
{
max = cnt;
maxi = i;
}
}
else
{
cnt = 0;
}
}
maxi = maxi-max+1;
for(int i = maxi;i<max+maxi;i++)
{
cout<<a[i];
}
return 0;
}
词组缩写
题目描述
定义:一个词组中每个单词的首字母的大写组合称为该词组的缩写。
比如,C语言里常用的EOF就是end of file的缩写。
输入
测试数据占一行,有一个词组(总长度不超过200),每个词组由一个或多个单词组成;每组的单词个数不超过10
个,每个单词有一个或多个大写或小写字母组成;
单词长度不超过10,由一个或多个空格分隔这些单词。
输出
输出规定的缩写
样例
输入复制
end of file
输出复制
EOF
解题思路:找出首字母(第一个字符或者该字符前是空格),大写输出
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char a[300];
int cnt;
int max,maxi;
cin.getline(a,300);
int n = strlen(a);
cnt = 0;
for(int i = 0;i<n;i++)
{
if((a[i]!=' '&&a[i-1]==' ')||i==0)
{
int t = a[i]-32;
cout<<(char)t;
}
}
return 0;
}
字符串前K位逆序
题目描述
随机输入一个长度不超过255的字符串,输入一个k,将字符串前k位倒置后输出。
输入
2行,
第一行一串字符。(测试数据不含空格)
第二行k
输出
只有一行,输出倒置后的字符串。
样例
输入复制
abcdefghijk
3
输出复制
cbadefghijk
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char a[300];
int cnt;
int k;
int max,maxi;
cin.getline(a,300);
int n = strlen(a);
cnt = 0;
cin>>k;
for(int i = 0;i<k/2;i++)
{
int j = k-1-i;
int t = a[i];
a[i] = a[j];
a[j] = t;
}
cout<<a;
return 0;
}
单词倒置
描述
输入一个句子(一行),将句子中的每一个单词翻转后输出。
输入
只有一行,为一个字符串,不超过500个字符。单词之间以空格隔开。
输出
翻转每一个单词后的字符串,单词之间的空格需与原文一致。
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char a[300];
int cnt;
cin.getline(a,300);
int n = strlen(a);
cnt = 0;
for(int i = 0;i<n/2;i++)
{
int j = n-1-i;
int t = a[i];
a[i] = a[j];
a[j] = t;
}
cout<<a;
return 0;
}
大小写字母互换
描述
把一个字符串中所有出现的大写字母都替换成小写字母,同时把小写字母替换成大写字母。
输入
输入一行:待互换的字符串。
输出
输出一行:完成互换的字符串(字符串长度小于80)。
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char a[300];
int cnt;
cin.getline(a,300);
int n = strlen(a);
cnt = 0;
for(int i = 0;i<n;i++)
{
if(a[i]>=97&&a[i]<=122)
{
a[i] = a[i]-32;
}
else if(a[i]>=65&&a[i]<=90)
{
a[i] = a[i]+32;
}
}
cout<<a;
return 0;
}
最短单词
描述
编写程序,读入一行英文(只包含字母和空格,单词间以单个或多个空格分隔),输出最短的单词
输入
输入为一个字符串(字符串长度至多为100)。
输出
输出最短的单词,如果有多个,输出第一个。
样例
输入复制
this is test programme code.
输出复制
is
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char a[300];
int cnt;
int min,mini;
cin.getline(a,300);
int n = strlen(a);
cnt = 0;
min = 9;
for(int i = 0;i<n;i++)
{
if(a[i]!=' ')
{
cnt++;
}
else
{
if(cnt<min)
{
min = cnt;
mini = i;
}
cnt = 0;
}
}
mini = mini-min;
for(int i = mini;i<min+mini;i++)
{
cout<<a[i];
}
return 0;
}
最长最短单词的差
描述
编写程序,读入一行英文(只包含字母和空格,单词间以单个或多个空格分隔),找出最长单词与最短单词
的长度差
输入
输入为一个字符串(字符串长度至多为100)。
输出
输出最长单词最短单词长度差。
样例
输入复制
this is test programme code.
输出复制
7
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char a[300];
int cnt;
int min,mini;
int max,maxi;
cin.getline(a,300);
int n = strlen(a);
cnt = 0;
min = 9;
max = 0;
for(int i = 0;i<n;i++)
{
if(a[i]!=' ')
{
cnt++;
if(cnt>max)
{
max = cnt;
maxi = i;
}
}
else
{
if(cnt<min)
{
min = cnt;
mini = i;
}
cnt = 0;
}
}
mini = mini-min;
maxi = maxi-max;
cout<<maxi-mini;
return 0;
}
过滤多余的空格
描述
编写程序,读入一行英文(只包含字母和空格,单词间以单个或多个空格分隔),删除单词之间多余的空格
输入
输入为一个字符串(字符串长度至多为100)。
输出
输出要求的字符串
样例
输入复制
this is test programme code.
输出复制
this is test programme code.
解题思路:本身是空格,前一个不是空格,才输出这个空格
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char a[300];
int cnt;
cin.getline(a,300);
int n = strlen(a);
cnt = 0;
for(int i = 0;i<n;i++)
{
if(a[i]==' ')
{
if(a[i]==' '&&a[i-1]!=' ')
{
cout<<a[i];
}
}
else
{
cout<<a[i];
}
}
return 0;
}
每个单词长度
描述
输入一行单词序列,相邻单词之间由1个或多个空格间隔,请对应地计算各个单词的长度。
注意,如果有标点符号(如连字符,逗号),标点符号算作与之相连的词的一部分。没有被空格间开的符号
串,都算作单词。
输入
一行单词序列,最少1个单词,最多300个单词,单词之间用至少1个空格间隔。单词序列总长度不超过1000。
输出
依次输出对应单词的长度,之间以逗号间隔。
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char a[300];
int cnt2[300] = {0};
int cntl;
int cnt;
cin.getline(a,300);
int n = strlen(a);
cnt = 0;
cntl = 0;
for(int i = 0;i<=n;i++)
{
if(a[i]==' '||a[i+1]=='\0')
{
cnt2[cntl] = cnt;
cntl++;
cnt = 0;
}
else
{
cnt++;
}
}
for(int i = 0;i<cntl-1;i++)
{
if(cnt2[i]!=0)
{
cout<<cnt2[i]<<",";
}
}
if(cnt2[cntl]!=0)
{
cout<<cnt2[cntl];
}
return 0;
}
所有字母转大写
描述
把一个字符串中所有出现的小写字母都替换成大写字母,。
输入
输入一行:待转换的字符串。
输出
输出一行:完成转换的字符串(字符串长度小于80)。
样例
输入复制
We get Good.
输出复制
WE GET GOOD.
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char a[300];
cin.getline(a,300);
int n = strlen(a);
for(int i = 0;i<n;i++)
{
if(a[i]>=97&&a[i]<=122)
{
a[i] = a[i]-32;
}
}
cout<<a;
return 0;
}