如何在c ++中为字符串对象赋值?

时间:2017-08-26 04:00:33

标签: c++ string char toupper

我试图通过将单个字符串分配给字符串来将字符串转换为大写字母字符串: -

#include <iostream>
#include <string>
#include <cstring>
#include <cctype>
using namespace std;

int main()
{
  string a;
  getline(cin,a);
  string b;
  b.reserve(a.size()+1);
  for(int i=(a.size()),i1=0;1;i1++)
  {
    if(b[i1]!='\0')
        b[i1]=(char)toupper(a[i1]);
    else
    {
        a[i1]='\0';
        break;
    }
  }
  cout << b <<endl;
}

每次按./a.out运行a.out时,只有endl获得打印

这里是样本运行: -

$ ./a.out 
play clash royale

$ 

我的节目有什么问题?如何将单个char分配给string ??

1 个答案:

答案 0 :(得分:3)

您的计划存在一些问题。主要的可能是string reservestring resize之间的差异。您在计划中想要的内容已经有a.size()长度的字符串,因此请使用b.resize(a.size())

下面有一个工作版本(有更好的方法来写这个,只是与OP提案最符合):

#include <iostream>
#include <string>
#include <cstring>
#include <cctype>
using namespace std;

int main()
{
   string a;
   getline(cin,a);
   string b;
   b.resize(a.size());
   for(int i1=0; i1 < a.size();i1++)
   {
      if(a[i1]!='\0')
          b[i1]=(char)toupper(a[i1]);
      else
      {
          b[i1]='\0';
          break;
      }
   }
   cout << b <<endl;
}