c++ - 如何删除字符串中的所有空格并将数据存储在两者之间?
问题描述
我是一名新程序员(< 1 年),所以如果我将简单的事情复杂化,请原谅。
我正在尝试删除给定字符串中的所有空格(制表符和空格字符),并将数据作为单个元素存储在向量中。我还想考虑前导和尾随空格。
我尝试使用字符串方法在字符串中向前移动两个索引,同时检查这些字符。到目前为止,我至少重写了五次代码,我总是得到:
terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::at: __n (which is 7754) >= this->size() (which is 42)
Aborted (core dumped)
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void makeTokens(string& separate);
int main()
{
string test = " u 65.45\t\t 36.12\t 78.25 0.00";
makeTokens(test);
return 0;
}
void makeTokens(string& separate)
{
vector<string> tokens;
unsigned short index1, index2 = 0;
while (separate.at(index1) == ' ' || separate.at(index1) == '\t')
{
index1++;
index2 = index1 + 1;
}
while (index2 < separate.length())
{
if (separate.at(index2) == ' ' || separate.at(index2) == '\t')
{
tokens.push_back(separate.substr(index1, index2 - index1));
index1 = index2;
while (separate.at(index1) == ' ' || separate.at(index1) == '\t')
{
index1++;
}
index2 = index1 + 1;
}
else
{
index2++;
}
if (index2 == separate.length() - 1)
{
if (separate.at(index2) == ' ' || separate.at(index2) == '\t')
{
tokens.push_back(separate.substr(index1));
}
}
}
for (unsigned short i = 0; i < tokens.size(); i++)
{
cout << tokens[i] << "|" << endl;
}
}
我希望控制台输出:
u|
65.45|
36.12|
78.25|
0.00|
如果通过了类似的测试字符串,除了末尾有空格,我仍然想要相同的输出。
编辑:我已将索引声明更改为:
unsigned short index1 = 0;
unsigned short index2 = 0;
现在控制台输出:
u|
65.45|
36.12|
78.25|
最后的 0.00 仍然缺失。
解决方案
未定义行为的第一个实例在这里:
unsigned short index1, ...
while (separate.at(index1) ...
// ^^^^^^
index1
未初始化。
推荐阅读
- php - 将点的坐标(纬度/经度)转换为“半径矩形”的坐标
- jquery - 自动建议和 ajax 调用
- swift - 如何在 Swift 通用 where 子句中添加 OR 条件?
- c++ - 使用泛型编程的基本数据结构
- c++ - 在 C++ 中合并两个内存块?
- node.js - 在 gremlin javascript 中使用谓词
- html - 在 HTML 中的链接前插入徽标
- sql - SQL Server - 检查列是否存在>>重命名和更改类型
- android - Android:通过每个按钮单击创建新的 ImageView
- react-native - React-Native-Camera Amazon Kindle 7 (5.1.1) 后置摄像头捕捉到纯绿色