我已经为我所在的一个类编写了代码,应该在其中拆分一个字符串并显示第二个字符串中有多少个唯一字符。但是,每次尝试构建代码时,都会出现““:错误:链接器命令失败,退出代码为1(使用-v查看调用)”。我已经看过其他有关此错误的问题,但没有找到VSCode的解决方案(如果有任何区别,请在MacBook Pro上)。有人看到我的错误在哪里吗?还有一个子问题:我是否一定需要#include字符串?有人告诉我std :: string是iostream库的一部分。如果我不需要字符串库,什么时候需要字符串?谢谢大家。
#include <iostream>
#include <string>
int splitwords(std::string, char);
int findnumchar(std::string);
int main()
{
std::string txt1("ABCDEF,GHI,JKLMN,OP");
std::string txt2("BACDGABCDAZ");
int result;
char delimiter = ',';
result = splitwords(txt1, delimiter);
result = findnumchar(txt2);
}
int splitwords(std::string txt, char delimiter)
{
int start, found, cnt = 0;
std::string splitstr;
start = 0;
while ((found = txt.find(delimiter, start)) != std::string::npos)
{
splitstr = txt.substr(start, found - start);
std::cout << "Split Word" << splitstr << std::endl;
start = found + 1;
cnt += 1;
}
splitstr = txt.substr(start, txt.length() - start);
std::cout << "Split Word" << splitstr << std::endl;
return cnt + 1;
}
int findnumchnar(std::string txt)
{
int uniquecnt = 0, index;
int seen[26] = {0};
std::string::iterator iter;
for (iter = txt.begin(); iter < txt.end(); iter++)
{
index = *iter - 'A';
if (seen[index] == 0)
{
seen[index] = 1;
uniquecnt+=1;
}
}
for (int i = 0; i <= 26; i++)
{
if (seen[i] == 1)
{
std::cout << static_cast<char>(i + 'A') << "\t";
}
}
std::cout << std::endl;
std::cout << "The number of unique characters: " << uniquecnt << std::endl;
return uniquecnt;
}
答案 0 :(得分:0)
由于std::string::npos
是64位常量,而found
是32位整数,因此编译器抱怨while循环内的条件永远都不成立(因为{{1} }从理论上讲,永远不能变得足够大以至于等于std :: string :: npos)。要解决此问题,只需将int替换为unsigned long long int。请参见下面的完整代码段:
found
答案 1 :(得分:0)
我有findnumchnar()而不是声明的findnumchar()
答案 2 :(得分:0)
有一个简单的错字,这就是为什么我得到错误。抱歉,谢谢您的回答!我将findnumchar定义为findnumchnar。总是检查愚蠢的东西