如何在c++中保存for循环之外的字符串
how do i save a string outside of for loop in C++
我想写一个程序,它需要一个带有符号和数字的字符串,只保存字母,丢弃其他一切。我试过使用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];
}
相关文章:
- 在循环C++中指定字符串之后,不会打印该字符串
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- C++-字符串是否包含一个带有简单循环的单词
- 在 c++ 中查找字符串中没有循环的数字总和
- 比较两个字符串后卡在无限循环中
- C++ - 使用基于范围的 for 循环将字符值分配给向量中的字符串不会分配值
- 而循环跳过 cin.getline() 对于 C 字符串
- 我正在尝试使用 while 循环从字符串中删除字母,直到没有字母。我在这里做错了什么?
- 如何使用将字符串拆分为 for 循环中的变量的程序
- 是否有可能实现O(N)时间和O(1)空间解决方案,以实现C++中的字符串循环移位
- 循环访问还包含未使用元素的字符串数组
- 循环访问资源字符串表
- C++ - 使用用户输入的字符串数据检查结构字符串数据(无限执行 while 循环)
- 修改向量中的字符串?(不使用循环)
- For 循环字符串忽略字符
- 如何按空格循环字符串?我怎么知道字符串中我当前所在的单词的索引号
- 在 c++ 中循环字符串读取器
- 如何在 c++ 中循环字符串
- 分段错误,通过std按字符循环字符串