我正在尝试编写带有符号和数字字符串的程序,只保存字母表,丢弃其他所有内容。我尝试使用str.erase,但我认为使用循环更容易。假设一切都是小写的,它工作得很漂亮.copy_str应该保存没有符号的新字符串,看看它是否完成我显示它。当它在if-it里面显示正确的字符串时,但当我在for循环外面显示它时什么都没有。 :/
这是我的代码:
int main()
{
string str="am73$$ore r0ma!!!";
int size_str=str.size();
string copy_str;
for(int i=0;str[i]!='\0';i++)
{
if((str[i]>=97) && (str[i]<123))
{
copy_str[i]=str[i];
cout<<copy_str[i];
}
}
cout<<copy_str;
答案 0 :(得分:4)
您应该使用isalpha
,请参阅here。
copy_str
未初始化,您只初始化循环中if语句的位置。使用+=
添加单个字符。
std::string src = "am73$$ore r0ma!!!";
std::string dst; // empty string
for ( size_t i = 0; i < src.size(); i++ )
{
if ( isalpha(src[i]) ){ dst += src[i]; }
}
std::cout << dst << std::endl;
答案 1 :(得分:2)
由于您要分配空字符串的不存在元素,因此程序未定义 分配给不存在的元素不会使字符串更长,它是无效的 由于程序未定义,任何事情都可能发生。
您可以使用push_back
展开结果:
if(str[i] >= 'a' && str[i] <= 'z')
{
copy_str.push_back(str[i]);
}
或+=
:
if(str[i] >= 'a' && str[i] <= 'z')
{
copy_str += str[i];
}