在下面的代码中,我试图用第一个字符替换'\0'.
我希望它打印一个空字符串,但在输出中它只是省略了它并显示其余的字符.
int main()
{
string str;
cin >> str;
str[0] = '\0';
cout << str << "\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
testing
esting
Run Code Online (Sandbox Code Playgroud)
如何在C++中终止字符串?
PS:我正在尝试这种方法在一个不同的问题中终止字符串,我需要在其间终止.
Mar*_*ila 51
std::string不是以空字符结尾的字符串.如果要清空它,请使用该clear()方法.如果要删除字符串的元素,请使用该erase()方法.
Que*_*onC 35
字符串有两种方法.
在C中,字符串是零终止的,这意味着'\ 0'表示字符串的结尾,这正是您所期望的.
C++(和大多数语言)使用计数字符串,这意味着字符串的结尾被索引,因此向字符串添加空终止符不会终止它.'\ 0'是非打印字符,因此当您打印时,您会看到您所看到的行为.如果要操作std :: string长度,则需要使用std :: string方法(http://www.cplusplus.com/reference/string/string/).
C++不关心字符串的null终止符.它们仅用于C兼容性.
顺便说一句,这应该具有您期望的行为.
cout<<str.c_str()<<"\n";
Run Code Online (Sandbox Code Playgroud)
也可以看看
为什么以null结尾的字符串?或者:以空值终止与字符+长度存储
Joh*_*ell 14
你以为你有
testing
esting
Run Code Online (Sandbox Code Playgroud)
作为输出,但你实际上得到了
testing
esting
^
|
+-- "empty" \0 char
Run Code Online (Sandbox Code Playgroud)
因为std::string仍然有"测试"的长度,你只需用'\ 0'替换第一个字符't'.当std::cout获得字符串,它看起来在字符串长度,并输出它的所有字符,这使得"\ 0"导致输出一个"空"插槽.
要真正清除字符串,请更喜欢打电话std::string::clear().同样有效std::string::reset(0),但它不具有表现力(你甚至可以指定一个空字符串......不寒而栗).实现可能会或可能不会使用'\ 0',所以不要认为这是一种摆弄外部观察表示的方法.
101*_*010 10
一个std::string类似于a的功能std::vector.如果你想删除std::string你可以使用的所有元素std::string::clear
#include <iostream>
#include <string>
int main() {
std::string str("testing");
std::cout << str << std::endl;
str.clear();
std::cout << str << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
如果你想删除字符串中的特定字符(例如,第一个字符),你可以使用std::string::erase:
#include <iostream>
#include <string>
int main() {
std::string str("testing");
std::cout << str << std::endl;
str.erase(str.begin());
std::cout << str << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
如果你想删除你的字符串中的特定字符,你可以std::vector使用erase-remove成语:
#include <iostream>
#include <string>
#include <algorithm>
int main() {
std::string str("testing");
std::cout << str << std::endl;
str.erase(std::remove_if(str.begin(), str.end(), [](char const &c){ return c == 't'; }), str.end());
std::cout << str << std::endl;
}
Run Code Online (Sandbox Code Playgroud)