在c++中将char转换为字符串

convert char to string in c++

本文关键字:字符串 转换 char c++ 中将      更新时间:2023-10-16

我正试图通过将字符串赋予函数来减少它。例如,如果我有"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