C++ 为什么会出现分割错误?以数字而不是字符串形式输出的原因是什么?
我知道出现分段错误的原因,但我无法通过以下代码找出错误,我使用这些代码根据空格分割字符串C++ 为什么会出现分割错误?以数字而不是字符串形式输出的原因是什么?,c++,string,c++11,vector,C++,String,C++11,Vector,我知道出现分段错误的原因,但我无法通过以下代码找出错误,我使用这些代码根据空格分割字符串 #include<iostream> #include<string> #include<vector> #include<typeinfo> using namespace std; vector<string> split(const string& s) { //cout << "HERE"; vector
#include<iostream>
#include<string>
#include<vector>
#include<typeinfo>
using namespace std;
vector<string> split(const string& s)
{
//cout << "HERE";
vector<string> tab;
for(unsigned int a = 0; a < s.size(); a++)
{
string temp = to_string(s[a]);
while(to_string(s[a]) != " ")
{
a++;
temp = temp + s[a];
}
tab.push_back(temp);
}
return tab;
}
int main()
{
int n;
cin >> n;
while(n--)
{
string s;
cin >> s;
vector<string> temp = split(s);
for(unsigned int i = 0; i < temp.size(); i++)
{
cout << temp[i] << endl;
}
}
return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
向量拆分(常量字符串和s)
{
//cout>n;
而(n--)
{
字符串s;
cin>>s;
向量温度=拆分;
对于(无符号整数i=0;i 无法回答您的最后一个问题:
C++通常(但并非总是)将char
值视为数字,如果将其传递给to_string
,则肯定会这样做。因此to_string(“”)
将返回“32”
(通常情况下),这是转换为十进制字符串的空格的字符代码
要将字符转换为相应的单元素字符串,请使用例如string(1',)
对于您的分段错误,调试器是正确的工具。您的分割函数有缺陷。您的程序将始终崩溃,因为while(to_string(s[a])!=“”)
while循环上的条件将导致无限循环
我觉得很奇怪,您使用的是字符串(s[a])。假设s[a]实际上是空格字符,即使在这种情况下,toString(“”)将返回一个包含“32”的std::字符串。“32”不等于“”,因此这将导致循环无限运行
因为在循环中,你在增加索引,如下所示
a++; ---> You increase the index in infite loop so a can go to millions
temp = temp + s[a]; ---> you are using the index and causing index out of range.
您将导致索引超出范围错误。程序应该做什么?另外,既然您似乎是在Linux上,您是否尝试过使用gdb?
std::string::find
和std::string::substr
对您来说已经足够了所有这些标记真的是必要的吗?回到您的问题,std::to_string
没有重载<代码>字符