【问题标题】:Program crashed after entering 10 strings输入 10 个字符串后程序崩溃
【发布时间】:2014-02-16 12:33:14
【问题描述】:

这个程序应该从键盘上读取 10 个字符串以及 5 个其他单词,这些单词构成了一个字符串列表。它将随机选择列表中的一个单词并替换所有元音。然后程序会要求你猜测。但是,我输入 10 个字符串后程序就崩溃了。

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <string>

int randomnum(){
int g, r, f = 0;
/*init random number generator*/
srand(static_cast<unsigned int>(time(0)));/*get a random num*/
g = rand();
r = (g % 13) + 1;
return(r);
}

int main(){
int k,l,f;
std::string *str = new std::string[14];
str[0] = "computer";
str[1] = "television";
str[2] = "keyboard";
str[3] = "magazine";
str[4] = "book";

std::cout<< "please enter 10 strings" <<std::endl;/*get strings into the array*/
    for(int i = 5;i < 15; i++){
            std::cin>>str[i];
    }
k = randomnum();
std::string e = str[k];
l= e.size();

char letter[l - 1];
strcpy(letter,e.c_str());

for(int i = 0; i < l; i++){
        if(letter[i] == 'a' || letter[i] =='e' || letter[i] == 'i' || letter[i] == 'o' || letter[i] == 'u' || letter[i] == 'A'|| letter[i] == 'E' || letter[i] =='I'
            || letter[i] == 'O'||letter[i] == 'U'){/*replace the vowel*/
            letter[i] = '_';
        }

    }
std::cout<< "Please guess the word: " << letter <<std::endl;
std::string gue;
std::cin>> gue;
if(gue == e) {
f++;
std::cin.clear();
std::cout<<"You guessed correct after "<< f << "guesses, Do you want to play it again?"<< std::endl;/*check the number and return the result*/
}
if(gue == "zzz"){
    exit(0);
}
else{
    f++;
    std::cin.clear();
    std::cout<<" Incorrect, guess another one!"<< std::endl;
    std::cin>>gue;
}
std::cin.clear();
std::cin.sync();
return 0;

}

【问题讨论】:

    标签: c++ string list


    【解决方案1】:
    std::string *str = new std::string[14];
    

    应该是

    std::string *str = new std::string[15];
    

    否则你只能再向数组添加 9 个字符串

    【讨论】:

      【解决方案2】:

      这是因为你为14个字符串分配了空间,但是写了15个字符串。我的建议是不要使用指针,而是 std::vector

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-04
        • 2014-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多