1、用string输入一句话克服遇到空格结束的问题
分析:如果直接输入整句话,例如“I am a student”,因为输入时遇到空格便停止,所以只能接收到第一个单词,输出结果:I
解决:用getline方法即可。
string str1;
cout<<"输入一句话"<<endl;
//cin>>str1;
getline(cin,str1);
cout<<"输出"<<endl;
cout<<str1;
2、大小写字母的相互转换
思路:只需要加上一个对应字母的ASCII码差值即可。(差值为32。'A'-'a'=-32)
例如:小写转大写
string a="absdck";
for (int i=0;i<a.length();i++)
{
a[i]=a[i]+('A'-'a');
}
cout<<a;3、将一句话中的单词逆序
分析:例如,句子"My name is lzy”逆序之后变成"lzy is name My"。可以将这个过程分解成两部,首先:逐个单词字母逆序,这一步之后的结果:"yM eman si yzl"然后:将整个句子逆序,即可得到结果"lzy is name My"。当然这两步可以调换次序,可以先将整个句子逆序得到"yzl si eman yM",然后在逐个逆序每个单词得到最终结果。
#include<iostream>
#include<string>
using namespace std;
void tran(string &str,int start,int end)
{
string temp=str.substr(start,end-start+1);
int j=temp.length();
int i=start;
while (j--)
{
str[i]=temp[j];
i++;
}
}
void tranverse(string &str)
{
int start=0,end=0;
//首先将每个单词反转,遇到空格反转
for (int i=0;i<str.length();i++)
{
if (str[i]==' ')
{
end=i-1;
tran(str,start,end);
start=i+1;
}
}
//反转最后一个单词
tran(str,start,str.length()-1);
//最后将整个句子倒过来
string temp=str;
int len=temp.length();
i=0;
while (len--)
{
str[i]=temp[len];
i++;
}
}
void main()
{
string str="My name is lzy";
tranverse(str);
cout<<str<<endl;
}