C++字符数组(5)

字符串逆序

题目描述: 随机输入一个长度不超过255的字符串,将其倒置后输出。 输入 只有一行。(测试数据不含空格) 输出 只有一行,输出倒置后的字符串。 样例

输入复制

 asdfghjkl123456

输出复制

654321lkjhgfdsa

解题思路:循环数组一半,对称位置交换

#include<iostream>
#include<iomanip>
#include<string.h>
using namespace std;
int main()
{
	char a[300];
	cin.getline(a,300);
	int l = strlen(a);
	for(int i=l-1;i>=0;i)
	{
		cout<<a[i];
	}
	
	
	return 0;
}

单词倒排

题目描述: 编写程序,读入一行英文(只包含字母和空格,单词间以单个空格分隔),将所有单词的顺序倒排并输出, 依然以单个空格分隔。 输入 输入为一个字符串(字符串长度至多为100)。 输出 输出为按要求排序后的字符串。

输入复制

Hello Hi How are you

输出复制

you are How Hi Hello

解题思路:双指针向前扫描,遇到空格输出。

#include<iostream>
#include<iomanip>
#include<string.h>
using namespace std;
int main()
{
	char a[300];
	cin.getline(a,300);
	int l=strlen(a);
	int j=l;
	for(int i=l-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<iomanip>
#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];
	cin.getline(a,300);
	int l=strlen(a);
	int cnt=1;
	for(int i=0;i<l;i++)
	{
		if(a[i]!=' '&&a[i-1]==' ')
		{
			cnt++;
		}
	}
	cout<<cnt;
	
	
	return 0;
}

最长单词

题目描述: 编写程序,读入一行英文(只包含字母和空格,单词间以单个或多个空格分隔),输出最长的单词 输入 输入为一个字符串(字符串长度至多为100)。 输出 输出最长的单词,如果有多个,输出第一个。 样例

输入复制

this is a test programme code.

输出复制

programme

解题思路:数组连续性问题,记录最长单词的起始位置,及长度,然后输出

#include<iostream>
#include<iomanip>
#include<string.h>
using namespace std;
int main()
{
	char a[300];
	cin.getline(a,300);
	int l=strlen(a);
	int cnt=0;
	int max=-1;
	int maxi=-1;	
	for(int i = 0;i<l;i++)
	{
		if(a[i]!=' ')
		{
			cnt++;
		}
		else
		{
			cnt = 0;
		}
		if(cnt>max)
		{
			max = cnt;
			maxi = i;
		}
	}
	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<iomanip>
#include<string.h>
using namespace std;
int main()
{
	char a[300];
	cin.getline(a,300);
	int l=strlen(a);
	int cnt=0;
	int max=-1;
	int maxi=-1;
	for(int i=0;i<l;i++)
	{
		if((a[i]!=' '&&a[i-1]==' ')||i==0)
		{
			cout<<a[i]-32;
		}
	} 
	
	
	
		
	
	return 0;
}

字符串前K位逆序

题目描述: 随机输入一个长度不超过255的字符串,输入一个k,将字符串前k位倒置后输出。 输入 2行, 第一行一串字符。(测试数据不含空格) 第二行k 输出 只有一行,输出倒置后的字符串。 样例

输入复制

abcdefghijk

3

输出复制

cbadefghijk

#include<iostream>
#include<iomanip>
#include<string.h>
using namespace std;
int main()
{
	char a[300];
	cin.getline(a,300);
	int l=strlen(a);
	int cnt=0;
	int k;
	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个字符。单词之间以空格隔开。 输出 翻转每一个单词后的字符串,单词之间的空格需与原文一致。

输入复制

asdf asdf

输出复制

fdsa fdsa

#include<iostream>
#include<iomanip>
#include<string.h>
using namespace std;
int main()
{
	char a[300];
	cin.getline(a,300);
	int l=strlen(a);
	int cnt=0;
	for(int i=0;i<l/2;i++)
	{
		int j=l-1-i;
		int t=a[i];
		a[i]=a[j];
		a[j]=t;
	}
	cout<<a;
	
	
	return 0;
}

大小写字母互换

题目描述: 把一个字符串中所有出现的大写字母都替换成小写字母,同时把小写字母替换成大写字母。 输入 输入一行:待互换的字符串。 输出 输出一行:完成互换的字符串(字符串长度小于80)。

输入复制

Hello Hi How are you

输出复制

hELLO hI hOW ARE YOU

#include<iostream>
#include<iomanip>
#include<string.h>
using namespace std;
int main()
{
	char a[300];
	cin.getline(a,300);
	int l=strlen(a);
	int cnt=0;
	for(int i=0;i<l;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<iomanip>
#include<string.h>
using namespace std;
int main()
{
	char a[300];
	cin.getline(a,300);
	int l=strlen(a);
	int cnt=0;
	int min=9999;
	int mini=9999;
	for(int i=0;i<l;i++)
	{
		if(a[i]!=' ')
		{
			cnt++;
		}
		else
		{
			cnt=0;
		}
		if(cnt<min)
		{
			min=cnt;
			mini=i;
		}
	}
	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<iomanip>
#include<string.h>
using namespace std;
int main()
{
	char a[300];
	cin.getline(a,300);
	int n = strlen(a);
	int cnt=0;
	int min=9999;
	int mini=9999;
	int max=-1;
	int maxi=-1;
	for(int i=0;i<l;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<iomanip>
#include<string.h>
using namespace std;
int main()
{
	char a[300];
	cin.getline(a,300);
	int l=strlen(a);
	int cnt=0;
	for(int i=0;i<l;i++)
	{
		if(a[i]==' ')
		{
			if(a[i]==' '&&a[i-1]!=' ')
			{
				cout<<a[i];
			}
		}
		else
		{
			cout<<a[i];
		}
	}	
    
	
	return 0;
}

每个单词长度

题目描述 :输入一行单词序列,相邻单词之间由1个或多个空格间隔,请对应地计算各个单词的长度。 注意,如果有标点符号(如连字符,逗号),标点符号算作与之相连的词的一部分。没有被空格间开的符号 串,都算作单词。 输入 一行单词序列,最少1个单词,最多300个单词,单词之间用至少1个空格间隔。单词序列总长度不超过1000。 输出 依次输出对应单词的长度,之间以逗号间隔。

输入复制

Hello Hi How are you

输出复制

5,2,3,3,3

#include<iostream>
#include<iomanip>
#include<string.h>
using namespace std;
int main()
{
	char a[300];
	int cnt2[300] = {0};
	cin.getline(a,300);
	int l=strlen(a);
	int cnt=0;
	int cntl=0;
	for(int i=0;i<=l;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<iomanip>
#include<string.h>
using namespace std;
int main()
{
	char a[300];
	cin.getline(a,300);
	int l=strlen(a);
	for(int i=0;i<l;i++)
	{
		if(a[i]>=97&&a[i]<=122)
		{
			a[i]=a[i]-32;
		}
	}
	cout<<a;
	
	
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值