字符串——字符单词的统计逆序(c++)

字符串逆序
题目描述
随机输入一个长度不超过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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值