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

how do i save a string outside of for loop in C++

本文关键字:循环 字符串 for 保存 c++      更新时间:2023-10-16

我想写一个程序,它需要一个带有符号和数字的字符串,只保存字母,丢弃其他一切。我试过使用str.erase,但我认为使用loop更容易。假设所有内容都是小写的,它运行得很好。copy_str应该保存没有符号的新字符串,为了查看是否完成了,我显示了它。当它在if内时,它显示正确的字符串,但当我在for循环外显示它时,什么也没有。:/
下面是我的代码:

    int main()
{
 string str="am73$$ore r0ma!!!";

 int size_str=str.size();
 string copy_str;
 for(int i=0;str[i]!='';i++)
 {
    if((str[i]>=97) && (str[i]<123))
    {
        copy_str[i]=str[i];
        cout<<copy_str[i];
    }
 }
 cout<<copy_str;

您应该使用isalpha,参见此处。

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;

程序是未定义的,因为你赋值给一个空字符串中不存在的元素。
给一个不存在的元素赋值不会使字符串变长,它是无效的。
由于程序是未定义的,所以任何事情都可能发生。

您可以使用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];
}