用C++将字符转换为整数

Convert a character to an integer in C++

本文关键字:整数 转换 字符 C++      更新时间:2023-10-16

如何将字符串中的每个字符设置为整数?这只是我写散列函数的第一件事。我必须将字符串中的每个字符设置为一个整数,这样我才能对它们的值求和。请帮忙!是这样的吗??

    int hashCode(string s)
{
   int Sum = 0;
   for(int i=0; i<strlen(s); i++)
   {
      Sum += (int)s[i];
   }
   return Sum;
}

是——在C和C++中,char只是一个小整数类型(通常在-128到+127之间)。当你对它进行数学运算时,它通常会自动转换为int,所以你甚至不需要你的演员阵容。

顺便说一句,您真的不想在for循环的停止条件中使用strlen(s)。至少对于大多数编译器来说,这将迫使它在每次迭代中重新评估strlen(s),所以你的线性算法变成了二次型。

size_t len = strlen(s);
for (int i=0; i<len; i++)
    Sum += s[i];

或者,如果s实际上是std::string,如参数类型所示:

for (int i=0; i<s.size(); i++)
    Sum += s[i];

还有一种可能性:

Sum = std::accumulate(s.begin(), s.end(), 0);

字符通常在内部用整数表示,因此s[i]可以分配给整数。

如果您有char '1',并且想要存储int 1,那么您可以执行s[i]-'0'

您可能正在寻找

Sum += s[i] - '0';

有关将数字转换为字符串(反之亦然)的一般情况,请参阅此FAQ条目。

您要查找的函数是sscanf。

你可以在标题stdio.h中找到它,它的定义就像这个

int sscanf ( const char * str, const char * format, ...);

在你的情况下,你会这样使用它:

string str = "SomeStringWithNumbers";
int s, len;
len = str.length();
for(int i = 0; i < len; i++ )
{
    int status = sscanf( str[i], "%d", &s);
    // Check status if necessary 
 }

如果您的字符串不包含所需的整数,则需要调整参数。然后,您可以修改第一个参数,使其直接指向数字所在的字符串部分,或者您必须调整字符串的格式。此外,您还应该检查返回值。

您可以使用strtol,也可以使用字符串流,因为它被标记为C++。

string myStream = "45";
istringstream buffer(myString);
int value;
buffer >> value; 

答案是(我认为)

int i = atoi("5")

将ascii转换为Integer的Btw atoi立场。

可能不支持使用Cat Plus Plus atoi。所以你最好不要用它;)