For循环不遍历整个数组 p>所以我在C++中还是很新的,我创建了这个循环来通过一个长串的txt列表,我在.cv文件中输入了30000个数组。现在,HashAll函数被用来查看每条tweet,找到哪里有一个#,然后将该单词复制到一个新字符串中,然后将该新字符串放入一个新数组中,以收集使用的hashtag。问题是,每次我测试我的代码时,我都会得到一个内核转储,我不知道为什么。下面是我的代码。谢谢你的帮助 void AllTweets::HashAll(){ int counter=0; for(int i=0; i<30000;i++){ //loop to looks are every tweet indv. string singleTweet = Tweet[i]; int x = singleTweet.length(); for(int j=0;j<x;j++){ string newHash; if(singleTweet[j]=='#') { int k=j; while(singleTweet[k]!=' '){ newHash=newHash+singleTweet[k]; k=k+1; } HashtagAll[counter]=newHash; counter=counter+1; } } } void AllTweets::HashAll(){ int计数器=0; for(int i=0;i
看起来问题在于,您总是希望在hashtag字之后找到一个空格,而在For循环不遍历整个数组 p>所以我在C++中还是很新的,我创建了这个循环来通过一个长串的txt列表,我在.cv文件中输入了30000个数组。现在,HashAll函数被用来查看每条tweet,找到哪里有一个#,然后将该单词复制到一个新字符串中,然后将该新字符串放入一个新数组中,以收集使用的hashtag。问题是,每次我测试我的代码时,我都会得到一个内核转储,我不知道为什么。下面是我的代码。谢谢你的帮助 void AllTweets::HashAll(){ int counter=0; for(int i=0; i<30000;i++){ //loop to looks are every tweet indv. string singleTweet = Tweet[i]; int x = singleTweet.length(); for(int j=0;j<x;j++){ string newHash; if(singleTweet[j]=='#') { int k=j; while(singleTweet[k]!=' '){ newHash=newHash+singleTweet[k]; k=k+1; } HashtagAll[counter]=newHash; counter=counter+1; } } } void AllTweets::HashAll(){ int计数器=0; for(int i=0;i,c++,arrays,twitter,C++,Arrays,Twitter,看起来问题在于,您总是希望在hashtag字之后找到一个空格,而在while()循环中搜索它时,您永远不会测试是否没有推断字符串的大小 一个简单的解决方案是将该测试包括在循环中: while (singleTweet[k] != ' ' && k < x) { newHash = newHash + singleTweet[k]; k++; } 此代码使用了std::string方法来处理此问题,同时避免了冗余工作、对象的无意义复制和内存碎片。忽略我的注释
while()
循环中搜索它时,您永远不会测试是否没有推断字符串的大小
一个简单的解决方案是将该测试包括在循环中:
while (singleTweet[k] != ' ' && k < x)
{
newHash = newHash + singleTweet[k];
k++;
}
此代码使用了
std::string
方法来处理此问题,同时避免了冗余工作、对象的无意义复制和内存碎片。忽略我的注释哈哈,很抱歉拼写错误。如果一条推特的末尾有一个标签,那么后面可能没有空格。
void AllTweets::HashAll()
{
size_t counter = 0;
for (size_t i = 0; i < 30000; ++i)
{
size_t find = 0;
while ((find = Tweet[i].find("#", find)) != std::string::npos)
{
size_t end = Tweet[i].find(" ", find + 1);
if (end == std::string::npos)
{
HashtagAll[counter++] = Tweet[i].substr(find);
break;
}
HashtagAll[counter++] = Tweet[i].substr(find, end - find);
find = end + 1;
}
}
}