不能将句子改成大写字母

时间:2017-09-09 12:38:49

标签: c++ toupper

为什么下面的程序没有将句子改为大写?

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

 int main()
 {
     char name[20];
     cout << "what is your name?" << endl;
     system("pause");
     cin.get(name, 20);
     name[20] = toupper(name[20]);
     cout << "Your name is " << name<< endl;
     system("pause");
 }

5 个答案:

答案 0 :(得分:0)

您必须将每个字符转换为大写字母,OnTouchLister只获取索引name[20](在您的情况下也是无效索引)。

您可以遍历数组以将每个字符转换为大写字母。

20

你还应该看到这个帖子:Why is "using namespace std" considered bad practice?

答案 1 :(得分:0)

如果此数组的起始索引为0,则名称[20]不存在。

答案 2 :(得分:0)

toupper不接受const字符串,但它只需要一个字符作为整数。

您的代码中还有一个UB试图读取数组的出站:

name [20] = toupper(name [20]);

因为您知道数组的索引从0到n-1而不是从1到n。即使你写得正确也是如此:

name[19] = toupper(name[19]);

上面的行只将字符20(索引19)转换为大写。这不是你想要的;你想把所有的字符转换成大写。

所以这是一个例子:

 char name[20];
 cout << "what is your name?" << endl;
 std::cin.get(name, 20);
 //  name[20] = toupper(name[20]); UB 


 for(int i(0); i < strlen(name); i++) // use strlen instead of specifying the length at compile-time
     name[i] = toupper(name[i]);
 std::cout << "Your name is " << name<< std::endl;


 std::cin.sync(); // only for flushing the input buffer.
 std::cout << "Enter name again: \n";
 std::string strName;
 std::getline(std::cin, strName);

 for(int i = 0; i < strName.length(); i++)
     strName[i] = toupper(strName[i]);

 std::cout << "name: " << strName << std::endl;
  • 使用类string最好是卡在字符数组中,它的灵活性和精心设计,与大小无关......

答案 3 :(得分:0)

要将?- length($A,U),between(1,U,N),length(L,N),maplist(=(X),L),append(L,$A). U = 6, N = 1, L = [[97, 98, 97, 98, 97, 98]], X = A, A = A, A = [97, 98, 97, 98, 97, 98] ; U = 6, N = 3, L = [[97, 98], [97, 98], [97, 98]], X = [97, 98], A = A, A = [97, 98, 97, 98, 97, 98] ; false. 更改为大写,您可以使用string

std::transform

答案 4 :(得分:-1)

#include <iostream>
#include <string>
using namespace std;
int main(){
char name[20];
cout << "what is your name?" << endl;
system("pause");
cin.get(name, 20);
for(int i=0;i<20;i++){
name[i]=toupper(name[i]);
}
cout << "Your name is " << name<< endl;
system("pause");

}