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