C++ 如何在c++;?
我试图将字符串转换为大写字母字符串,方法是为字符串指定单个字符,如下所示:-C++ 如何在c++;?,c++,string,char,toupper,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
#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.size()
的字符串,因此,请使用b.resize(a.size())
工作版本如下(有更好的编写方法,只是与OP提案最为一致):
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
字符串a;
getline(cin,a);
b串;
b、 调整大小(a.size());
对于(inti1=0;i1 cout Testa
并赋值b
@GillesGouaillardet的意思???尝试在反转字符串后显示(cout这是什么奇怪的int i=(a.size()),i1=0
这一切?你甚至不使用i
b
是一个空字符串,即使在reserve()
调用之后。b.size()==0
仍然。因此,b[i1]
是任何i1
值的缓冲区溢出。您的程序显示未定义的行为。如果使用C++11,您只需执行:for(char chA:a){…}
并将循环中的所有a[i1]
替换为chA
@Tuan333我将使用std::transform(a.begin(),a.end(),a.begin(),::toupper);
执行转换或std::transform(a.begin(),a.end(),b.begin(),::toupper)
说真的。我以为我们只是在修改OP的源代码,所以我想我会加上一些注释使它更现代:P@Tuan333那么还有其他的现代方法吗?请你告诉我?我对C++是新的。
$ ./a.out
play clash royale
$
#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;
}