Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么会出现分割错误?以数字而不是字符串形式输出的原因是什么?_C++_String_C++11_Vector - Fatal编程技术网

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
没有重载<代码>字符