最近在用string时本来想声明两个string将一个string中的小写字母全部变为大写字母
一开始想到的是转一个大写赋值一个结果发现string类型长度没变
改错之前
#include<iostream>
#include<cctype>
using namespace std;
int main()
{
/*string s;
cin>>s;
if(isalpha(s))
{
cout<<s<<"is alpha";
}
*/
string a;
cin>>a;
string b;
//b[0]=(a[0]-32);
//cout<<b[0];
for(int i=0;i<a.length();i++)
{b[i]=(a[i]-32);
}
cout<<b.size();
for(int i=0;i<b.length();i++)
cout<<b[i];
return 0;
}
解决
#include<iostream>
#include<cctype>
using namespace std;
int main()
{
/*string s;
cin>>s;
if(isalpha(s))
{
cout<<s<<"is alpha";
}
*/
string a;
cin>>a;
string b;
//b=(a[0]-32);
//cout<<b[0];
for(int i=0;i<a.length();i++)
//此处修改
{b+=(a[i]-32);
}
cout<<b.size();
for(int i=0;i<b.length();i++)
cout<<b[i];
return 0;
}
改错之前虽然b后面地址都被存入了正确的大写字母但是字符串本身并没有改变长度没变返回为他的首地址
改后相当于对string b进行了赋值边赋值长度也增加
b+=(a[i]-32)
当然也可使用
b+=toupper(a[i])