如何在C ++中保存for循环外的字符串

时间:2015-09-16 22:44:40

标签: c++ string for-loop

我正在尝试编写带有符号和数字字符串的程序,只保存字母表,丢弃其他所有内容。我尝试使用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;

2 个答案:

答案 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];
}