超出范围的字符串?

时间:2014-09-10 04:49:00

标签: c++ arrays string object

嘿伙计们因为string.at(x)而超出范围错误,我不明白为什么。任何帮助,基本上我试图确保第一个字符是否< 'A'或>我的对象字符串中的'z'。此外,我认为我的字符串比较可能无法正常工作,但如果我找到具有重复项的唯一单词,则可能与未完成的代码有更多关系。

struct wordCount{
string word;
int count;
}storeword[100];

void countWordFreq(wordCount compares[]){
int a=0;
unsigned i=0;
for(a;a<101;a++){
    cout<<"Length"<<compares[a].word.length();
    if(compares[a].word.at(i)<='z'||compares[a].word.at(i)>='A'){       
    compares[a].count++;
    }
    for(int b=1;b<101;b++){
        cout<<"Length"<<compares[b].word.length();
        if(compares[b].word.at(i)<='z'||compares[b].word.at(i)>='A'){           
        if(compares[a].word.compare(compares[b].word)==0){
            cout<<"true" << endl;
            compares[a].count++;
        }
    }
        b++;
    }
    a++;

}
for(int q;/*compare[q].word.at(0)<='z'||compare[q].word.at(0)>='A'*/q<10;q++){
    cout<<"Word: " << compares[q].word << " Count: " << compares[q].count << endl;
}

}

1 个答案:

答案 0 :(得分:0)

哇。听起来有风险(是 - 如果是这样,对不起)不礼貌,我想我的工作方式会有所不同。

C ++标准库提供了相当多的工具来更轻松地完成这项工作,并且很难找到难以找到的错误等等。我会把它们用掉。

只是为了它的价值:我不确定我完全理解你为每个单词的第一个字符所描述的比较。目前我假设你只想计算以字母开头的东西。但是,如果需要的话,很容易改变它。

#include <string>
#include <map>
#include <iostream>
#include <iomanip>
#include <cctype>
#include <sstream>

void countWordFreq(std::string const &input) {
    std::map<std::string, size_t> counts;

    std::istringstream buffer(input);

    std::string word;

    // read the words, count frequencies of those that start with letters
    while (buffer >> word)
        if (isalpha(word[0]))
            ++counts[word];

    // write out each word we found and how often it occurred:
    for (auto const &count : counts)
        std::cout << std::setw(20) << count.first << ": " << count.second << "\n";
}

目前,这将按字母顺序打印出唯一的单词。如果您不需要这种排序,则可以(通常)使用std::unordered_map而不是std::map来提高速度。