在c++中将char转换为字符串
convert char to string in c++
我正试图通过将字符串赋予函数来减少它。例如,如果我有"abrakadabra"
,函数将返回一个字符串"abrkd"
。这意味着所有字符在返回值中应该只存在一次。
我有以下功能:
string textletters(string text) {
string ret = "";
for (unsigned i = 0; i < text.length(); i++) {
if (i == 0) {
ret += str;
} else {
bool exist = false;
for (unsigned j = 0; j < i; j++) {
if (text.at(i) == text.at(j) {
exist = true;
}
}
if (!exist) {
ret += str;
}
}
}
return ret;
}
我知道text.at(i)
会返回char
。但我想把这个char
转换成string
,这样我就可以把它连接起来
使用push_back
方法将单个字符附加到std::string
。您也可以使用operator +=
来执行此操作。
我提出了另一种方法:
C++附带了许多容器逻辑。
您可以将字符串转换为set
,这只允许每个值中有一个元素:
#include <set>
#include <algorithm>
std::string input("akrakadabra");
std::set<char> only_once(input.begin(), input.end());
不利的一面是,字母是事后排序的,而不是按照字符串中第一次出现的顺序,但您没有指定是否需要特定的顺序。
您也可以使用范围构造函数将set
转换回string
:
std::string result(only_once.begin(), only_once.end());
或类似的。
这通常是用std::stringstream
:完成的
#include <sstream>
...
std::stringstr ss;
...
ss << text.at(i);
...
std::string result = ss.str();
正如其他人所指出的,仅仅回答名义上的问题实际上对这个问题没有用处:
有一个std::string
构造函数,它接受一个字符和一个重复计数。因此,要创建由单个字符组成的字符串,可以使用1:的重复计数
string(1, ch)
但这是相当浪费的,即使是在具有小字符串优化的实现中也是如此。因此,只需将您的字符直接附加到现有字符串中,正如Andrew在回答中所建议的那样。
这意味着返回的字符序列应该具有原始顺序的字符,但如果这不是实际要求,那么解决方案很简单:
std::string res = text;
std::sort(res.begin(), res.end());
auto last = std::unique(res.begin(), res.end());
res.erase(last, res.end());
return res;
我需要复习我的C++课程,但目前我只能用VisualBasic代码帮你举一个例子,希望它能给你带来一个新的想法,看看我做了什么:
Option Explicit
Public Function DeleteRepeated(Text As String) As String
Dim length, i As Integer
length = Len(Text)
Dim NewText, Char As String
NewText = ""
For i = 1 To length
Char = Mid(Text, i, 1)
If InStr(1, NewText, Char, vbTextCompare) = 0 Then
NewText = NewText & Char
End If
Next i
DeleteRepeated = NewText
End Function
以下是您正在寻找的内容,现在按照您的要求使用C++,如果您有任何问题,请告诉我,希望它能有所帮助:
// Delete Repeated Char in String
#include <iostream>
#include <string>
using namespace std;
string UniqueInString (string MyString)
{
string chr,NewText;
for (unsigned i=0; i<MyString.length(); ++i)
{
chr = MyString.at(i);
if (NewText.find(chr) == string::npos)
{
NewText = NewText + chr;
}
}
return NewText;
}
int main ()
{
string z = "abrakadabra";
cout<< UniqueInString(z);
}
这是lambda解决方案:
string res = "abrakadabra";
res.erase(remove_if(res.begin(), res.end(), [&res](const char& c)
{ return find(res.c_str(), &c, c) != &c; }), res.end());
cout << res << "n";
输出:abrkd
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 当字符串存储在变量中时,如何将字符串转换为wchar_t
- 如何将这个std::字符串转换为std::基本字符串
- 如何正确将字符串转换为标准::时间::system_clock::time_point?
- 如何在C++中将十六进制字符串转换为文本数据
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- 如何从字符串转换为双精度*
- C++:如何将 unix 时间的字符串转换为 *tm?(使用时间错误:"cannot convert 'String' to 'tm*' ")
- 如何在C++中将 Python 字符串转换为其转义版本?
- 如何在 C++11 中将标准::字符串转换为标准::u32字符串?
- 如何将整数字符串转换为整数的二维向量?
- 使用 "stringstream " 将字符串转换为整数
- 将字符串转换为浮点数或整数,而无需使用内置函数(如 atoi 或 atof)
- 将文件复制到自定义位置,存在字符串转换问题
- 将ANSI C字符串转换为UNICODE
- 如何将节点 V8 字符串转换为 C++ 字符串
- 在C++中将字符串转换为双精度,而无需科学记数法
- 使用从文件(stod、strtod、atof)中提取的数据C++从字符串转换为双精度.csv
- 如何在C++中将字符串转换为双精度?
- 将字符串转换为无符号字符数组/字节数组