大写字符串数组中的单个字符

时间:2015-08-11 07:00:51

标签: c++ arrays string

我必须将字符串数组中的名字和姓氏大写,但是在将字符串值输入数组后,我仍然坚持如何访问特定值。

这是我的两个函数,第一个将值读入两个独立的数组,第二个函数应该将名字和姓氏大写,同时将所有其他字符更改为小写。

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.   

1 个答案:

答案 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]);
        }

    }
}