为什么我会遇到细分错误?将输出作为数字而不是字符串的原因是什么?
Why am I getting a segmentation error? What is the reason getting output as numbers instead of strings?
我知道为什么会出现分割故障,但是我无法通过以下代码来找出错误,以下是我根据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.
您将导致索引之外的范围错误。
相关文章:
- 初始化或分配空字符串文字到指向 C 中的 char 的指针或指向 C++ 中 const char 的指针的原因是什么
- 在C++17中,引用const字符串的语义应该是什么
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 字符串上的 C++ push_back() 和 pop_back() 的 Kotlin 是什么?
- 这里的字符串函数是什么意思
- 将位字符串转储到二进制文件的最佳方法是什么
- 是什么使这个以'+'开头的字符串添加成为有效的语句?
- 在c++中,减号和加号对字符串的作用是什么
- 当我们已经有 char[] 时,在 c++ 中字符串的必要性是什么?
- C++ 将字符串数据包转换为 iphdr语言 - 字符串数据包的格式应该是什么?
- 这句话是什么意思?半 += 字符串(频率[i] / 2, i + 'a');
- Xamarin Android:在 C++ 中将字符串从 C# 封送到 Unicode 字符串的正确方法是什么?
- 使用c 中的sort()函数对字符串进行排序的最坏情况是什么是什么
- 字符串文本不能有外部链接的原因是什么?
- 当我打印字符串时,我不知道它是什么输出
- 字符串中单个字符作为数组的数据类型是什么
- 检查字符串是否与可能的输入之一匹配的最有效方法是什么?
- '|' scanf 格式字符串是什么意思
- 一个字符串开始另一个字符串是什么意思?c++
- 表示文件路径的guid字符串是什么?