c++ 在引发超出标准范围的示例后终止调用

vlju58qv  于 2022-12-05  发布在  其他
关注(0)|答案(1)|浏览(104)

我写了一个只提取字母的代码,但是我得到了一个意外的错误。

#include <iostream>
#include <string>
#include <algorithm>
#include <ctype.h>

using namespace std;


int main() {
  string str1 = "Hello World!-";
  sort(str1.begin(), str1.end());

  int stringcut1 = -1;

  for(int z = 0; z < str1.size(); z++)
    {
        str1[z] = tolower(str1[z]);
    }

  for(int i = 0; i < str1.length()+1; i++)
    {
        int checkstring = str1[i];

        if(checkstring < 97 && checkstring > 122)
        {
          stringcut1 ++;
        }
    }

  str1 = str1.substr(stringcut1, str1.length());

  cout<<str1;
  
    
}

我写了一个只提取字母的代码,但是我得到了一个意外的错误。

fzsnzjdm

fzsnzjdm1#

这里似乎有三个不同的错误

  1. if (checkstring < 97 && checkstring > 122)你能想到多少个字符的ASCII码小于97ASCII码大于122?显然应该是if (checkstring < 97 || checkstring > 122)
  2. int stringcut1 = -1;这个计数应该从零开始,int stringcut1 = 0;。假设你没有从字符串中删除任何字符,那么在结尾你要做str1 = str1.substr(-1, str1.length());,这显然是一个错误。偶然地,如果你想让一个子字符串取字符串的其余部分,那么你只需要做str.substr(n);,不需要第二个参数。
  3. for(int i = 0; i < str1.length()+1; i++),不知道为什么要在这里的长度上加一,只加str1.length()str1.size()
    我假设如果你修正了#1,那么由于#3而被处理的额外字符肯定会给你的计数增加一个额外的1,所以#2中的-1会得到补偿。但是这太模糊了,只要遍历你的字符串中的常规字符,从零开始计数。

相关问题