为什么我会遇到细分错误?将输出作为数字而不是字符串的原因是什么?

Why am I getting a segmentation error? What is the reason getting output as numbers instead of strings?

本文关键字:字符串 是什么 数字 遇到 细分 错误 为什么 输出      更新时间:2023-10-16

我知道为什么会出现分割故障,但是我无法通过以下代码来找出错误,以下是我根据whitespaces分开字符串的代码。

#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;
}

另外,如果我在拆分功能中评论WARE循环,则在打印出结果字符串时会获得数字。是因为to_string吗?如果我在主要功能中打印出来的结果字符串上使用typeid(variable).name(),我会得到: NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE

回答您的最后一个问题:

c 经常但并非总是会将char值视为数字,如果将其传递给to_string,则肯定会将其视为数字。因此,to_string(' ')将返回"32"(通常),这是一个空间的字符代码。

将其转换为字符串。

将字符转换为相应的单元素字符串,例如string(1, ' ')

对于您的分割故障,调试器是正确的工具。

您的拆分功能是错误的。您的程序将始终挤压,因为while(to_string(s[a]) != " ")段环上的条件会导致无限循环。

对我来说,您正在使用to_string(s [a])。假设s [a]确实是空间char,即使在这种情况下,toString(")将返回包含" 32"的std :: string。" 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. 

您将导致索引之外的范围错误。