C++字符串_Xout_of_range("无效的字符串位置");
C++ string _Xout_of_range("invalid string position");
我是C++新手。我有一个作业,要求我根据输入执行一系列操作。代码似乎有效,但当我的字符串大小达到 16 时停止。尝试了 2 个测试用例。
输入是一个整数,后跟换行符,后跟字母数字 + 空格 + "[' 或 ']' 或 '<' 示例:
1
my ]]name]] is]] joha<n]<n doe]]]]]
法典:
int main() {
int TC; cin >> TC; cin.get(); //absorb newline
while (TC--) {
string s1;
string::iterator itr = s1.begin(); //move using iterators
while (1) {
char c;
cin.get(c);
if (c == '[') { //move to first element
itr = s1.begin();
}
else if (c == ']') { // move to last element
itr = s1.end();
}
else if (c == '<') {
if (s1.length() > 0) {
itr--;
s1.erase(itr); //erase current position
}
}
else if (c == 'n') { //cout at newline char
cout << s1 << endl;
break;
}
else { //add to string
s1.insert(itr, c);
itr++;
}
cout << s1 << ' ' << s1.size() << endl; //checking
}
}
return 0;
}
使用插入或擦除等操作后,迭代器可能无效。
您需要使用从这些成员函数返回的迭代器。
这是一个演示程序。
#include <iostream>
#include <string>
#include <limits>
#include <sstream>
int main()
{
std::string input( "1nmy ]]name]] is]] joha<n]<n doe]]]]]n" );
std::istringstream iss( input );
size_t n;
iss >> n;
iss.ignore( std::numeric_limits<std::streamsize>::max(), 'n' );
while ( n-- )
{
std::string s;
char c;
auto it = s.end();
while ( iss.get( c ) && c != 'n' )
{
switch ( c )
{
case ']':
it = s.end();
break;
case '[':
it = s.begin();
break;
case '<':
if ( it != s.begin() )
{
it = s.erase( --it );
}
break;
default:
it = s.insert( it, c );
++it;
break;
}
}
std::cout << s << 'n';
}
return 0;
}
它的输出是
my name is john doe
相关文章:
- 如何将元素添加到向量的字符串位置
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- 为什么字符串的 move() 会改变内存中底层数据的位置?
- 返回员工和工资(给定位置子字符串)
- 将文件复制到自定义位置,存在字符串转换问题
- 替换字符串位置 X 中的单词C++
- 在特定位置为字符串添加空格
- 计算在同一位置至少包含一个常用字符的不同字符串对
- 如何在另一个字符串的x位置插入一个字符串?
- 我如何知道字符串中字符相对于英文字母的位置值?
- C++ - 重置字符串流不会重置获取位置或清除标志吗?
- 反转字符串中单词的位置,而不更改 O(1) 空格限制中特殊字符的顺序
- 如何从字符串向量中选择第 n 个位置?
- 如何从输入字符串中提取特定位置的字符?
- C++字符串_Xout_of_range("无效的字符串位置");
- 将字符数复制到新字符串位置的字符串操作,例如 S[0]
- 如何从字符串位置构造CSTRING/STD :: String
- 如何在 boost::regex 中找到子匹配的字符串位置
- 空字符串位置返回为*
- 如果我将一个值赋给一个目前不使用的字符串位置,究竟会发生什么?