添加新阵列会更改以前的阵列吗?

时间:2019-02-06 18:17:30

标签: c++

我正在尝试制作一个程序,询问用户名称,然后重复该操作,说出名称中的字母数,名称的第一个字母以及名称中的第一个字母在字母表中的哪个位置。到目前为止,我已经知道了,但是当我引入新的char alpha时,char名称即被更改。 name [0]自动变为alpha [0]或a。我该如何解决?

#include <iostream>

int main()
{
    char name[30];
    int y;

    std::cout << "What is your name? \n";    
    std::cin >> name;

    char p;
    int z=0;

    for (int i= 0; p = name[i], p != '\0'; i++)
    {
        std::cout << "Calculating... \n";
        z = i+ 1;
    }

    std::cout << "Your name is " << name << '\n';
    std::cout << "You have " << z << " letters in your name \n";
    std::cout << "The first letter of your name is " << name[0] << '\n';

    char alpha[] = "abcdefghijklmnopqrstuvwxyz";

    if (name[0] = alpha[0])
    {
        y = 1;
    }
    else
        for (y = 1 ; name[0] != alpha[y]; y++)
        {
        }

    std::cout << name[0] << " is the " <<  y << " letter of the alphabet \n";

    return 0;
}

1 个答案:

答案 0 :(得分:3)

我建议使用类std::string,您可以使用它的成员,例如std::string::length(),该成员检索字符串的长度(字符数)。另外,您不需要将字母存储在字符数组中,而是使用isalphatoupper ...

这里是一个例子:

std::string name;
std::cout << "name: ";
std::cin >> name;

std::cout << "Your name is: " << name << std::endl;
std::cout << "The first letter in your name is: " << name[0] << std::endl;
std::cout << "The index of the first letter in your name is: " << (int)( toupper(name[0]) - 'A' + 1 ) << std::endl;
std::cout << "There are " << name.length() << " letters in your name" << std::endl;

您可能会认为这有点复杂(int)( toupper(name[0]) - 'A' + 1 ),但这是它的工作原理:

  • 用户可以输入小写或大写字母,所以我不在乎,因此我将其转换为大写字母,例如a变为A,因此我从实际字母中减去A并添加1以获取其字母索引。例如:如果用户输入hellotoupper使hH,则H-A给出字母的索引,但是索引为0,所以我加1。所以A是1而不是0,而H是8而不是7 ...