用C++将字符转换为整数
Convert a character to an integer in C++
如何将字符串中的每个字符设置为整数?这只是我写散列函数的第一件事。我必须将字符串中的每个字符设置为一个整数,这样我才能对它们的值求和。请帮忙!是这样的吗??
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。所以你最好不要用它;)
相关文章:
- 努力将整数转换为链表。不知道我在这里做错了什么
- 如何在C++中将整数转换为其数字数组
- 如果整数与指针大小相同,则重新解释将整数转换为指针双射是否具有双射作用?
- 将最小值整数转换为无符号长整型
- 为什么我们不能将使用异或运算找到的整数转换为字符?
- 在C++中,将无符号整数转换为八进制表示,反之亦然的最佳方法是什么
- 将74位整数转换为以31为底的整数
- 独立于实现的浮点/整数转换
- 以最少的步骤将给定整数转换为另一个整数
- 浮点到整数转换出错(即使浮点数已经是整数)
- 了解双精度转换与整数转换中的整数与截断关系
- 禁止具有精度损失的整数转换
- 将任意整数转换为 void*
- 将 32 位大端有符号整数转换为有符号小端整数
- char a[0] 使用 itoa() 将整数转换为字符串的目的
- 使用函数时从整数转换为字符串
- 尝试从整数转换为字符串的月份
- 如何在C++中将整数转换为字节,以便 Unity 在通过 UDP 传输后能够理解它们
- 如何将 Q 格式的整数转换为浮点数(反之亦然)
- 如何避免字符串到整数转换情况下的无效参数异常