我是C ++的首发。我尝试编写一个获取特定字符串的代码,例如 - "there1hello0"
。我试图按照这条规则从中做出判决:
每个单词都以一个数字结尾,指定它在句子中的位置。
因此,句子是:"hellothere"
。
我的代码:
void analyze()
{
string Given = "there1hello0";
int flag = 0;
string word = "";
string Display[2];
for (int i = 0; i <= Given.length(); i++) {
if (isdigit(Given[i])) {
for (int x = flag; x <= 1; x--) {
word += Given[i - x];
}
Display[(int)Given[i]] = word;
word = "";
flag = 0;
}
else {
flag++;
}
}
for (int z = 0; z <= 1; z++) {
cout << Display[z];
}
}
int main()
{
analyze();
system("pause");
return 0;
}
我包含了<string>
和<iostream>
库,并使用了名称空间std。
出于某种原因,我无法弄明白。因为我无法真正理解异常,所以我的代码不起作用并抛出以下内容:
Exception thrown: write access violation. _My_data was 0x7001AC.
任何帮助都将不胜感激。
答案 0 :(得分:0)
您可以使用调试器轻松跟踪错误。我强烈建议学习如何使用它。
但无论如何,你的代码有很多问题。首先,您应该了解循环工作的方式以及如何迭代字符串。
for (int i = 0; i <= Given.length(); i++)
应该是
for (int i = 0; i < Given.length(); i++)
所以请<=
使用<
。因为如果n是长度,因为字符串的最后一个元素存储在位置n-1上,因为你是从0开始迭代。
同样在你的内循环中
for (int x = flag; x <= 1; x--) {
你正在迭代,所以你应该比较x >= 1
而不是x <= 1
。
同样(int)Given[i]
返回Given[i]
中存储的char的ASCII值。例如,如果Given[i]='0'
那么(int)Given[i]
将返回char'0'的ascii值,即48,而不是你想象的0。
您可以在此处找到有关此问题的更多信息:Convert char to int in C and C++。