标准C语言中如何将字符串中的内容转换为字符数组?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了标准C语言中如何将字符串中的内容转换为字符数组?相关的知识,希望对你有一定的参考价值。

不是 char str[]="hello";这种形式。
我遇到的情况是字符串是一个变量,但标准C语言中没有字符串变量。(编程环境只支持标准C语言)

c语言中没有字符串类型的变量,用字符指针表示字符串,char *p = “hello”
可以直接使用数组下表访问字符串中的字符,例如 p[0]='h',p[1]='e',但最后一个字符p[5]='\0';
参考技术A #include<string.h>
char *p; /*字符串变量*/
char a[81]; /*字符数组*/
strcpy(a,p); /*调用字符串拷贝函数,(C中的字符串是不能用“=”直接赋值的)*/

不知道我理解的对不对,希望对你有用
参考技术B /**************************************************
* 函数名: CharToInt
* 参数:
* 形参:
* intString: 保存整数的字符串
* 返回值:
* int: 成功返回转换后的整数,否则返回0
* 功能:
* 把字符串转换成整数
* 例如:
* "1200" => 1200
* 作者: sdh
* 编写明细:
* 完成时间 2009-10-23 作者名 sdh
**************************************************/

int CharToInt(char* intString)

int i =1;
int j =1;
int b =0;
int a =strlen( intString );

for( i=0 ;i<a ;i++)

b = b+(intString[a-i-1]-48)*j;
j=j*10;

return b;


这个函数只能将一个字符串中的数字字符转换成一个数字。如果多个数字用空格隔开,我想是不是可以先记录空格的位置,然后求出每个字符函数在数组中的位置,比如b[]="12 21 -2 -3 2 3 6 100 ",-2的位置就是从b[6]到b[7],然后将每个数字字符串当做一个小数组调用我上面的那个函数。本回答被提问者和网友采纳

如何将 C++ 或 C 中的字符串转换为整数数组?

【中文标题】如何将 C++ 或 C 中的字符串转换为整数数组?【英文标题】:How do I convert a string in C++ or C to an integer array? 【发布时间】:2008-12-31 18:10:12 【问题描述】:

如何将字符串转换为整数数组?我可以使用sstream,因为atoi 不起作用?!

【问题讨论】:

我认为您应该举几个所需输入/输出的示例以使其更清晰 k .. 假设 der 是存储在字符串中的 no 110011000 我想将其存储在向量数组中!作为数字怎么做 您想将二进制字符串转换为整数吗? 那么vector的元素就是1,1,0,0,1,1,0,0,0? 卡巴斯基,我认为你应该更准确地详细说明你想要什么。我很确定我告诉你的是不是你想要的:p 【参考方案1】:

正如您在 cmets 中所说,您有一个二进制字符串,并且您想将其转换为整数。为此使用 bitset:

std::istringstream is(str);
std::bitset<32> bits; // assuming each num is 32 bits long

while(is >> bits) 
    unsigned long number = bits.to_ulong();
    // now, do whatever you want with that long.
    v.push_back(number);

如果你在那个字符串str中只有一个二进制数,你可以侥幸逃脱

unsigned long number = std::bitset<32>(str).to_ulong();

在 C 中也可以转换...

long value;
char const *c = str;
for(;;) 
    char * endp;
    value = strtol(c, &endp, 2);
    if(endp == c)
        break;

    /* huh, no vector in C. You gotta print it out maybe */
    printf("%d\n", value);
    c = endp;

atoi 无法解析二进制数。但是strtol 可以解析它们,如果你告诉它正确的基础。

【讨论】:

boost::dynamic_bitset 如果它是可变大小的长度 greg,std::bitset 负责处理。它在阅读时停在第一个空格处。你必须给出最大宽度。但他无论如何都想转换为整数。所以我认为将其设置为 sizeof(long)*CHAR_BIT 应该可以。【参考方案2】:

您希望转换如何进行? 您只是想要一个包含数组中每个字符的 ASCII 值的数组吗? (所以 "abc" 变成 [97, 98, 99, 0])?

或者你想以某种方式解析字符串? ("1, 2, 3" 变成数组 [1, 2, 3])

在第一种情况下,在 C++ 中,我会这样做:

struct convert 
  int operator()(char c) 
    return static_cast<int>(c);
  
;

std::string str = "hello world";
std::vector<int> result;
std::transform(str.begin(), str.end(), std::back_inserter(result), convert())

当然你可以使用原始数组代替向量,但是由于字符串的长度可能会是可变的,然后数组只是自找麻烦。

如果这不是您想要的,您可能需要编辑您的问题以更具体。

【讨论】:

【参考方案3】:

据我了解,输入字符串“110013”将转换为数组 1,1,0,0,1,3。下面是如何在 C++ 中做到这一点:

string a = "1110011000";
vector<int> v;
for(int i = 0 ; i < a.length() ; i++)
    v.push_back(a[i] -'0');


// Check the result
for(int i = 0 ; i < v.size() ; i++)
    cout << v[i] << endl;

【讨论】:

虽然这对有经验的 C 程序员来说是显而易见的,但我可能会指出“技巧”是 a[i]-'0'。它依赖于这样一个事实,即数字的 ASCII 表示彼此相邻,因此 '0' 不是 0,但它保证总是比 '1' 小 1【参考方案4】:

快速字符串拆分例程:

convert(string str, string delim, vector<int>& results)

  int next;
  char buf[20];
  while( (next= str.find_first_of(delim)) != str.npos ) 
    if (next> 0) 
      results.push_back(atoi(str.substr(0,next), buf, 10));
    str = str.substr(next+1);
  
  if(str.length() > 0)
    results.push_back(atoi(str.substr(0,next), buf, 10));

您可以使用 stringstream 代替 atoi(它确实有效,一次只处理一个 int)

int i;
stringstream s (input_string)
s >> i;

如果你结合 my 和 jalf 的代码,你会得到一些非常好的东西。

【讨论】:

【参考方案5】:

将 istream_iterator 与字符串流结合使用。

通过数组我假设你真的是指 std::vector 因为你不知道编译时整数的数量。但是可以轻松修改代码以使用数组而不是向量。

#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <iterator>
#include <algorithm>

int main()

    std::string     data = "5 6 7 8 9";
    std::vector<int>    store;


    std::stringstream   dataStream(data);
    std::copy(std::istream_iterator<int>(dataStream),
              std::istream_iterator<int>(),
              std::back_inserter(store)
             );

    // This line just copies the store to the std::cout
    // To verify it worked.
    std::copy(store.begin(),
              store.end(),
              std::ostream_iterator<int>(std::cout,",")
             );

【讨论】:

【参考方案6】:

语言:C

标题:

#include <stdlib.h>

函数原型:

long int strtol(const char *nptr, char **endptr, int base);

示例用法:

strtol(nptr, (char **) NULL, 10);

【讨论】:

以上是关于标准C语言中如何将字符串中的内容转换为字符数组?的主要内容,如果未能解决你的问题,请参考以下文章

C语言中,如何将一个数组中的数值转换成字符串输出?

C语言怎么把字符串转换为可以用于计算的数字

C语言中,如何将一个数组中的数值转换成字符串输出?

C语言如何把一个字符串转换成数字

如何将char类型数组转换为unicode字符串

C语言中如何将数字变成字符串啊?