C++ C++&引用;“托珀”;不将字符转换为大写

C++ C++&引用;“托珀”;不将字符转换为大写,c++,string,for-loop,char,toupper,C++,String,For Loop,Char,Toupper,我试图把字符串中的每个字母都转换成大写。我循环遍历每个字符,并在其上使用toupper。但是,当我打印新字符串时,它不起作用。抱歉,如果这是一个新手问题。任何帮助都将不胜感激:) #包括 #包括 使用名称空间std; int main() { 字符串str1,str2; cin>>str1>>str2; int len=str1.size(); 对于(int i=0;i

我试图把字符串中的每个字母都转换成大写。我循环遍历每个字符,并在其上使用
toupper
。但是,当我打印新字符串时,它不起作用。抱歉,如果这是一个新手问题。任何帮助都将不胜感激:)

#包括
#包括
使用名称空间std;
int main()
{
字符串str1,str2;
cin>>str1>>str2;
int len=str1.size();
对于(int i=0;icout
std::toupper
返回一个值,而不是修改其参数。因此您需要执行以下操作:

str1[i] = std::toupper(str1[i]);
str2[i] = std::toupper(str2[i]);
以便实际修改字符串


如果打开警告,例如使用
-Wall
,编译器将告诉您您的代码版本无效。

您需要将修改后的字符串保存回str数组中。类似如下:

str[i] = toupper(str[i]);

在循环中,您不会更改字符串的元素,因为
toupper()
返回一个新字符,它不会更改传递的字符。您需要使元素与返回的字符相同,如下所示:

for (int i = 0; i < len; i++) {
    str1[i] = toupper(str1[i]);
    str2[i] = toupper(str2[i]);
    cout << str1[i] << " " << str2[i] << endl;
}
for(int i=0;icout这可能更好,具体取决于您的编码标准:

std::transform(str1.begin(), str1.end(), str1.begin(), std::toupper);
std::transform(str2.begin(), str2.end(), str2.begin(), std::toupper);
上面使用STL函数
transform
将字符串转换为全大写。

首先启动此循环

for (int i = 0; i < len; i++) {
    toupper(str1[i]);
    toupper(str2[i]);
    cout << str1[i] << " " << str2[i] << endl;
}
没有效果,因为它们既不更改str1[i]
no
str2[i]

您还需要将调用
toupper
的参数转换为类型
unsigned char

您可以通过以下方式分别输出每个字符串

for ( unsigned char c : str1 )
{
    std::cout << ::toupper( c );
}
std::cout << ' ';

for ( unsigned char c : str2 )
{
    std::cout << ::toupper( c );
}
std::cout << '\n';
for(无符号字符c:str1)
{
库特侧注:所以请注意链接文档页面注释部分的警告。在internet上搜索“c++transform toupper”。
    toupper(str1[i]);
    toupper(str2[i]);
for ( unsigned char c : str1 )
{
    std::cout << ::toupper( c );
}
std::cout << ' ';

for ( unsigned char c : str2 )
{
    std::cout << ::toupper( c );
}
std::cout << '\n';