为什么下面的程序没有将句子改为大写?
#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");
}
答案 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");
}