Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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

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方法来处理此问题,同时避免了冗余工作、对象的无意义复制和内存碎片。忽略我的注释

看起来问题在于,您总是希望在hashtag字之后找到一个空格,而在
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;
        }
    }
}