从输入到输出的哈希表
hashtable from input to output
我想实现哈希表,到目前为止,我已经从文件中读取数据,但当我想将第一个字符串写入 Tabh 时,有些东西不起作用。代码编译没有错误,但控制台中没有任何显示。有人可以帮我吗?我认为我错误地实现了:if (Tabp[ite].substr(0) == "a"){...}
#include <iostream>
#include <fstream>
using namespace std;
void Add(string T[], int r, long k, string w);
//void print();
//void delete();
//void stop();
int main()
{
string linie;
int licznik = 0;
ifstream policz("test.txt");
while(getline(policz, linie))
licznik++;
policz.close();
string * Tabp = new string[licznik];
fstream plik;
plik.open("test.txt");
string wiersz;
for (int b =0; b<licznik; b++)
{
getline(plik, wiersz);
Tabp[b] = wiersz;
}
string iloscprzypadkow = Tabp[0].substr(0);
int n = stoi(iloscprzypadkow);
string rozmiarstring = Tabp[1].substr(5,7);
int size = stoi(rozmiarstring);
string * Tabh = new string[size];
for (int ite=2; ite<licznik; ite++)
if (Tabp[ite].substr(0) == "a")
{
string temp = Tabp[ite].substr(4,5);
long klucz = stoi(temp);
string wartosc = Tabp[ite].substr(7,14);
Add(Tabh, size, klucz, wartosc);
}
//if (wyrazenie == "p")
//{
//}
//if (wyrazenie == "d")
//}
//{
//if (wyrazenie == "s")
//{
//}
}
void Add(string Tabh[], int rozmiar, long klucz, string wartosc)
{
cout<<rozmiar<<klucz<<wartosc;
int indeks = klucz%rozmiar;
Tabh[indeks] = wartosc;
cout<<indeks<<" "<<klucz<<" "<<wartosc;
}
-------------------------
input:
1
size 10
add 13 ala
print
add 23 ola
print
delete 13
print
stop
substr
return 的一个参数版本是从给定索引开始到字符串末尾的子字符串。因此,您对 Tabp[ite].substr(0)
的调用将 return Tabp[ite]
的副本。要获得一个字符的子字符串,您需要指定使用双参数版本,其中第二个参数是您想要的子字符串的长度(不是结束索引,因为看起来您在代码的其他地方正在做)。
所以你想使用 Tabp[ite].substr(0,1) == "A"
。或者,因为它只是一个字符,只需使用 Tabp[ite][0] == 'A'
.
检查单个字符
我想实现哈希表,到目前为止,我已经从文件中读取数据,但当我想将第一个字符串写入 Tabh 时,有些东西不起作用。代码编译没有错误,但控制台中没有任何显示。有人可以帮我吗?我认为我错误地实现了:if (Tabp[ite].substr(0) == "a"){...}
#include <iostream>
#include <fstream>
using namespace std;
void Add(string T[], int r, long k, string w);
//void print();
//void delete();
//void stop();
int main()
{
string linie;
int licznik = 0;
ifstream policz("test.txt");
while(getline(policz, linie))
licznik++;
policz.close();
string * Tabp = new string[licznik];
fstream plik;
plik.open("test.txt");
string wiersz;
for (int b =0; b<licznik; b++)
{
getline(plik, wiersz);
Tabp[b] = wiersz;
}
string iloscprzypadkow = Tabp[0].substr(0);
int n = stoi(iloscprzypadkow);
string rozmiarstring = Tabp[1].substr(5,7);
int size = stoi(rozmiarstring);
string * Tabh = new string[size];
for (int ite=2; ite<licznik; ite++)
if (Tabp[ite].substr(0) == "a")
{
string temp = Tabp[ite].substr(4,5);
long klucz = stoi(temp);
string wartosc = Tabp[ite].substr(7,14);
Add(Tabh, size, klucz, wartosc);
}
//if (wyrazenie == "p")
//{
//}
//if (wyrazenie == "d")
//}
//{
//if (wyrazenie == "s")
//{
//}
}
void Add(string Tabh[], int rozmiar, long klucz, string wartosc)
{
cout<<rozmiar<<klucz<<wartosc;
int indeks = klucz%rozmiar;
Tabh[indeks] = wartosc;
cout<<indeks<<" "<<klucz<<" "<<wartosc;
}
-------------------------
input:
1
size 10
add 13 ala
print
add 23 ola
print
delete 13
print
stop
substr
return 的一个参数版本是从给定索引开始到字符串末尾的子字符串。因此,您对 Tabp[ite].substr(0)
的调用将 return Tabp[ite]
的副本。要获得一个字符的子字符串,您需要指定使用双参数版本,其中第二个参数是您想要的子字符串的长度(不是结束索引,因为看起来您在代码的其他地方正在做)。
所以你想使用 Tabp[ite].substr(0,1) == "A"
。或者,因为它只是一个字符,只需使用 Tabp[ite][0] == 'A'
.