【问题标题】:Split string into array of chars将字符串拆分为字符数组
【发布时间】:2011-01-10 15:56:57
【问题描述】:

我正在编写一个程序,该程序需要输入一个字符串,然后将其分解为单个字母。本质上,我需要帮助找到将“字符串”转换为["s","t","r","i","n","g"] 的方法。默认情况下,字符串也使用字符串数据类型存储,而不仅仅是字符数组。我想保持这种方式并避免使用 char 但如有必要会使用它。

【问题讨论】:

  • 拆分后的字母需要做些什么吗?也就是说,您需要将字母放入string以外的某种数据结构中?
  • 这是一个愚蠢的问题,一个字符串就是一个字符数组。
  • 感谢您的提问,答案对我有所帮助,我知道这很明显,但我被卡住了。

标签: c++ string split


【解决方案1】:

假设你已经输入了字符串:

string s("string");
vector<char> v(s.begin(), s.end());

这将用字符串中的字符填充向量v

【讨论】:

  • 我见过的最好的解决方案!非常感谢。
【解决方案2】:
string a = "hello"; 
cout << a[1];

我希望能解释一下

【讨论】:

  • 我不喜欢它,因为我不是来提供教程的,只是回答。
  • 为了记录,你也可以这样做: cout
  • @AshleysBrain: 或者 cout
【解决方案3】:

字符串只是底层字符的序列(即 std::string 的 char 和 std::wstring 的 wchar_t)。

因此,您很容易得到每个字母:

for (std::string::size_type l = 0; l < str.length(); ++l)
{
    std::string::value_type c = str[l];
}

【讨论】:

  • 你是::gonna::scare::him::with::all::that::stuff。 imo 使用int 或者更好的是size_t 将适用于所有现有平台,而且更加清晰。
【解决方案4】:

尝试使用std::stringc_str()方法:

#include <string>
using namespace std;

int main(void)
{
  string text = "hello";
  size_t length = text.length() + sizeof('\0');
  char * letters = new char[length];
  strcpy(letters, length.c_str());
  for (unsigned int i = 0; i < length; ++i)
  {
      cout << '[' << i << "] == '" << letters[i] << "'\n";
  }
  return EXIT_SUCCESS;
}

【讨论】:

  • 不需要将 sizeof('\0') 添加到长度,因为它可能大于 1,然后分配的数组将具有比所需更大的大小。添加 1 而不是 sizeof('\0') 更好。
  • 乔治,sizeof(char) 总是 1。
  • 不是真的! sizeof(char) 并非总是 1. 我使用的 DSP 芯片 everything 至少为 32 位、char、short、int -- sizeof(char) = = sizeof(short) == sizeof(int)。 C 标准只是说 sizeof(char)
  • 不,@Ryan,对不起,你错了。第 5.3.3 节“Sizeof”指出:“sizeof(char)、sizeof(signed char) 和 sizeof(unsigned char) 为 1”。 char 是一个字节,但也不一定是八位字节(8 位)。这与 C 相同。这是来自 C++0x 的 n3000 草案,但多年来一直如此。
  • 啊,我的立场是正确的。我真正的意思是 not 假设您明确说明的 1 == 8 位。 DSP 芯片的有趣之处在于 1 == sizeof(char) == sizeof(short) == sizeof(int) 当我发现 1 == 32 位时这让我很惊讶。
【解决方案5】:
string input ="some string for example my cat is handsome";
vector<string> split_char_to_vector(string input) {
  vector<string> output;
  for(size_t i=0;i<=input.length();i++) {
    output.push_back(input[i]));
  }
  return output;
}

如果要将拆分字符串转换为字符,首先遍历字符串并将字符串的每个字符写入char数组的第i个位置,即

 char array[1000];
std::string input="i dont think love never ends";
 for(size_t i=0;i<=input.length();/*or string::npos;*/i++)
  {
            if (input[i] != '\0')
        {
            array[i] = input[i];
        }
        else
        {
            break;
        }
    }
    for (size_t i = 0; i < 100; i++)
    {
        std::cout << array[i] << std::endl;
    }

【讨论】:

  • 添加详细信息以使答案易于理解。
  • 欢迎来到 Stack Overflow!虽然这段代码可以回答这个问题,但最好包含一些上下文,解释它是如何工作的以及何时使用它。从长远来看,纯代码的答案往往不太有用。有关更多信息,请参阅How do I write a good answer?
【解决方案6】:

如果要将拆分字符串转换为字符,首先遍历字符串并将字符串的每个字符写入char数组的第i个位置,即

  char array[1000];
   std::string input="i dont think love never ends";
   for(size_t i=0;i<=input.length();/*or string::npos;*/i++)
    {
        if (input[i] != '\0')
        {
        array[i] = input[i];
        }
    else
        {
        break;
        }
    }
    //to avoid noise after position input.length();
        for (size_t i = input.length(); i <= 1000; i++)
        {
             array[i] = '\0';
        }
      //ie return array; or print
    for (size_t i = 0; i < 100; i++)
    {
    std::cout << array[i] << std::endl;
    }

【讨论】:

    【解决方案7】:

    您可以使用 for 循环来遍历字符串的字符。

        std::string str = "word"
        for(char i : str){
            std::cout << i << std::endl;
        }
    

    【讨论】:

      猜你喜欢
      • 2012-02-22
      • 2016-04-01
      • 1970-01-01
      • 2012-06-27
      • 1970-01-01
      • 2011-11-26
      相关资源
      最近更新 更多