我正在尝试制作一个程序,询问用户名称,然后重复该操作,说出名称中的字母数,名称的第一个字母以及名称中的第一个字母在字母表中的哪个位置。到目前为止,我已经知道了,但是当我引入新的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;
}
答案 0 :(得分:3)
我建议使用类std::string
,您可以使用它的成员,例如std::string::length()
,该成员检索字符串的长度(字符数)。另外,您不需要将字母存储在字符数组中,而是使用isalpha
,toupper
...
这里是一个例子:
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以获取其字母索引。例如:如果用户输入hello
,toupper
使h
到H
,则H
-A
给出字母的索引,但是索引为0,所以我加1。所以A
是1而不是0,而H
是8而不是7 ...