我必须将字符串数组中的名字和姓氏大写,但是在将字符串值输入数组后,我仍然坚持如何访问特定值。
这是我的两个函数,第一个将值读入两个独立的数组,第二个函数应该将名字和姓氏大写,同时将所有其他字符更改为小写。
void read(string names[],int DVDrent[],int& n)
{
n=0; // # of data calculated
cin >> names[n] >> DVDrent[n]
while(cin)
{
n++;
cin >> names[n] >> DVDrent[n];
}
}
void reformat(string& names)
{
int nlen;
nlen = names.length();
names[0] = toupper(names[0]);
for (int i=1; i<nlen; i++)
{
if (names[i] == ',')
names[i+1] = toupper(names[i+1]);
names[i+2] = tolower(names[i+2]);
}
}
如果我只是将数据存储为字符串,那么我的第二个函数就可以工作。我现在卡住了,因为我不确定如何阅读我的数组中的特定字符。
作为参考,我输入的数据如下。
./a.out < data > output
数据:
smith,EMILY 3
Johnson,Daniel 2
williAMS,HanNAH 0
joneS,Jacob 4
bROwn,MicHAEL 5
DAVIS,ETHAn 2
millER,soPhiA 0
TAYlor,matthew 1
andERSON,aNNa 7
期望的输出:
Smith,Emily 3
Johnson,Daniel 2
William,Hannah 0
.
.
.
Anderson,Anna 7
etc.
答案 0 :(得分:0)
请尝试使用reformat()
方法:
void reformat(string& names) {
bool isUpper = true; // store if the next letter should be upper
for(size_t i = 0; i < names.length(); ++i) {
if (names[i] == ',') {
isUpper = true; // if it's a comma, make the next letter upper
}
else if (isUpper) {
names[i] = toupper(names[i]);
isUpper = false; // make the next letter lower
}
else {
names[i] = tolower(names[i]);
}
}
}