【发布时间】:2017-08-26 04:00:33
【问题描述】:
我正在尝试通过将单个字符分配给这样的字符串来将字符串转换为大写字母字符串:-
#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
$
我的程序有什么问题??如何将单个字符分配给字符串??
【问题讨论】:
-
测试
a并分配b -
@GillesGouaillardet 的意思是???
-
尝试在反转字符串后显示(
cout << b <<endl;)。然后如果它工作检查循环和条件 -
int i=(a.size()),i1=0这个奇怪的东西到底是怎么回事?你甚至不用i。 -
b是一个空字符串,即使在reserve()调用之后也是如此。b.size() == 0仍然。因此,b[i1]是任何i1值的缓冲区溢出。您的程序表现出未定义的行为。