如何将字符串中的每个字符设置为整数?这是我编写哈希函数时必须做的第一件事。我必须将字符串中的每个字符设置为一个整数,以便我可以将它们的值相加。请帮忙!它是这样的吗?
int hashCode(string s)
{
int Sum = 0;
for(int i=0; i<strlen(s); i++)
{
Sum += (int)s[i];
}
return Sum;
}
答案 0 :(得分:13)
是 - 在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);
答案 1 :(得分:4)
字符通常由整数在内部表示,因此可以将s[i]
分配给整数。
如果你有char '1'
,并希望存储int 1
,那么你可以s[i]-'0'
。
答案 2 :(得分:1)
答案 3 :(得分:0)
您可以使用strtol或者,因为这是标记为C ++的字符串流。
string myStream = "45";
istringstream buffer(myString);
int value;
buffer >> value;
答案 4 :(得分:0)
您正在寻找的功能是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
}
如果您的字符串不只包含您想要的整数,则需要调整参数。然后,您可以修改第一个参数,使其直接指向您的数字所在的字符串部分,或者您必须调整格式字符串。你也应该检查返回值。
答案 5 :(得分:-1)
答案是(我认为)
int i = atoi("5")
顺便提一下ascii到整数。
可能不支持使用Cat Plus Plus atoi。所以你最好不要使用它;)