使用散列表组织字符串
organizing strings using a hash table C++
我写的代码是:
- 请求字符串
- 将字符串转换为它的ascii值
- 然后将此号码发送给只接受前8位数字的折叠功能从右边开始,把它分成3个数字,把它们加在一起,然后也从右边取前3个数字
- 这个带有3位数字的数字是表示哈希表的指针数组中字符串的顺序
例如:如果我输入字符串"abclmn" -> 979899100108109110 ->折叠函数08109110将数字分成3个数字,如下-> 081,091,10 -> 81+91+10=182182是字符串"abclmn"应该插入哈希表
的位置这是我的代码:
#include<iostream>
#include<cmath>
#include<string>
#include<queue>
using namespace std;
int folding(long int num1)
{
int num;
num=num1%100000000;
int x=num/100000;
int y=(num%100000)/100;
int z=num%100;
int w=(x+y+z)%1000;
return w;
}
int main()
{
string s;
cout<<"input the variable name"<<endl;
cin>>s;
int* a=new int [s.length()];
for (int i=0;i<(s.length());++i)
{
a[i]=(int)s[i];
}
queue<int> q;
for (int i=0;i<(s.length());++i)
{
if (a[i]<10) q.push(a[i]);
else
if ((a[i]>9)&&(a[i]<100))
{
q.push(a[i]/10);
q.push(a[i]%10);
}
else if (a[i]>100)
{
q.push(a[i]/100);
q.push((a[i]%100)/10);
q.push(a[i]%10);
}
}//filling the number in a queue
long int num=0;
for (int i=(q.size());i>0;--i)
{
num=num+(q.front()*pow(10*1.0,i-1));
q.pop();
}
cout<<"the answer"<<folding(num)<<endl;
system("pause");
return 0;
}
我的问题是我不知道字符串有多长所以如果字符串太长输出将是一个随机值这是因为我使用了long int作为输出值,这是不够的。
那么是否有解决方案或另一种方法来获得相同的结果?
将该字符串转换为它的ASCII值
然后将这个号码发送到只从右边取前8位数字的折叠功能,把它分成3个数字,加在一起,然后取前3个从右边开始的数字
好吧,因为您只对最后8位数字感兴趣,所以我们不需要将整个字符串转换为其ASCII表示形式。让我们试着沿着字符串向后遍历,并以这种方式构建我们的数字。
int getDigits( std::string s ) {
long long int digits = 0;
int runningLength = 0;
int prevLength = 0;
for ( auto it = s.rbegin(); it != s.rend(); ++it ) {
runningLength += prevLength;
//if digits is a 7 digit number then appending a 3 digit number would overflow an int
digits += (long long int)*it * pow(10, runningLength);
//we have to work out the length of the current digit
//so we know how much we need to shift by next time
int dLength = 0;
for ( int d = *it; d > 0; dLength++, d /= 10 );
prevLength = dLength;
if ( digits >= 100000000 ) break;
}
return digits % 100000000;
}
然后将这个数字发送给只取前8个的折叠函数从右边开始,把它分成3个数字,加在一起,然后也从右边取前3位数字
你的代码看起来很好。
如果使用16进制(并假设只有可打印的ASCII),将字符串分割成数字的代码会简洁得多。
相关文章:
- 在 c++ 中多次更改字符串列表
- C++未知长度字符串的数组,其行为类似于 Python 字符串列表
- 如何将包含括号的字符串列表平展为单个列表?
- 如何存储字符串列表
- 声明变量以保存字符串列表时的内存分配
- C 给出了一个字符串列表,如何从类中获取各个变量地址
- 合并两个字符串列表
- 寻找一种更快的方法来帮助减少/创建大量字符串列表
- 在字符串列表中查找字符串,然后将字符串设置为找到的字符串?
- 字符串列表中的部分搜索
- 如何在运行时显示QT中的字符串列表
- 如何扫描 N 个字符串(使用结构),然后反向输出该字符串列表
- c++搜索字符串列表中的特定字符串
- 从大向量中删除字符串列表的有效方法
- C++来比较两个字符串列表
- C++如何将用户输入与具有严格排序的字符串列表进行比较
- search用字符串列表输入数字(类似于t9字典)
- 如何在C++中从向量中读取字符串列表
- 是否有Qt对话框或小部件可以交互式地对字符串列表进行排序
- 将字符串列表插入 2D 矢量