【问题描述】
输入一个长度小于20的不含空格的字符串,然后对该字符串做如下处理:对字符串中的每个字符,如果是大写字母,将其转化为小写;如果是小写字母,将其转化为大写,最后将处理后的字符串输出。
要求用指针对字符串进行处理。
【输入形式】
输入一行:长度小于20的不含空格的字符串。
【输出形式】
输出一行:处理以后的字符串。
【样例输入】
ILoveC++!
【样例输出】
ilOVEc++!
首先使用指针来解决
#include<iostream>
using namespace std;
int main()
{
char a[20],*p;//*p是char p是地址
cin>>a;
p=&a[0];
for(int i=0;i<20;i++)
{
if(*(p+i)>='a'&&*(p+i)<='z')
*(p+i)=*(p+i)-'a'+'A';
else if(*(p+i)>='A'&&*(p+i)<='Z')
*(p+i)=*(p+i)-'A'+'a';
}
cout<<p;//?,这里我目前还不是特别理解,呃呃
return 0;
}
然后是不用指针的
#include<bits/stdc++.h>
using namespace std;
int main()
{
char a[20];//用数组来储存字符串
int i=0;
cin>>a;
while(a[i]!='\0')//判断有没有结束
{
if(a[i]>='a'&&a[i]<='z')
{
a[i]-=32;//大小写ASCII码值相差32
}
else if(a[i]>='A'&&a[i]<='Z')
{
a[i]+=32;
}
i++;
}
cout<<a;
}
#include<bits/stdc++.h>
using namespace std;
int main()
{
string a;
int i=0;
cin>>a;
while(a[i]!='\0')//这里为何可以这样,还没有去查找解决疑问,呃呃
{
if(a[i]>='a'&&a[i]<='z')
{
a[i]-=32;
}
else if(a[i]>='A'&&a[i]<='Z')
{
a[i]+=32;
}
i++;
}
cout<<a;
}
然后又对循环条件又做了略微的变化
#include<bits/stdc++.h>
using namespace std;
int main()
{
string a;
int i=0;
cin>>a;
while(i<a.size())//然而在这里出现了警告,因为i是整型,而a.size()是无符号类型的
{
if(a[i]>='a'&&a[i]<='z')
{
a[i]-=32;
}
else if(a[i]>='A'&&a[i]<='Z')
{
a[i]+=32;
}
i++;
}
cout<<a;
}
报错为:comparison between signed and unsigned integer expressions
解决办法是把i变成无符号类型的
while(unsigned i <a.size())
或把a.size()定义为整型
#include<bits/stdc++.h>
using namespace std;
int main()
{
string a;
int i=0;
cin>>a;
int b=a.size();
while(i<b)//a[i]!='\0'
{
if(a[i]>='a'&&a[i]<='z')
{
a[i]-=32;
}
else if(a[i]>='A'&&a[i]<='Z')
{
a[i]+=32;
}
i++;
}
cout<<a;
}
写个博客好像写日记似的,嘿嘿,小白之旅从此开始吧,哈哈,嘻嘻,记录一下今天的问题及一些想法,怪好嘞