C语言中怎么把字符数组里的数据存放到字符串数组中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中怎么把字符数组里的数据存放到字符串数组中相关的知识,希望对你有一定的参考价值。
比如说把已经初始化为a[100]="sdkjf skdj d"里的数据存放成*b[]="sdkjf","skdj","d",用c怎么做的?
利用C语言标准库中的strtok()函数,可以轻松快捷的将以空格分隔开的一串字符分成多个子串,存放到字符指针数组中。
函数说明:
#include <string.h> //头文件
char *strtok(char *str, const char *delim);
strtok()用来将字符串分割成一个个片段。参数str指向欲分割的字符串,参数delim则为分割字符串中包含的所有字符。当strtok()在参数str的字符串中发现参数delim中包涵的分割字符时,则会将该字符改为\\0 字符。在第一次调用时,strtok()必需给予参数str字符串,往后的调用则将参数str设置成NULL。每次调用成功则返回指向被分割出片段的头指针。当没有被分割的串时则返回NULL。
参考代码:
参考技术A /*C语言中怎么把字符数组里的数据存放到字符串数组中
*/
#include<stdio.h>
#include<iostream.h>
void main()
char a[ 100 ], *p, *q;
int i, j, n = 0;
char *b[ 50 ];//字符指针数组
printf("Please input a sentence:\n");
gets( a );
p = a;
while( *p != '\0' )
if( *p == ' ') //跳过空格
p++;
continue;
else
i = 0;
while( *( p + i ) != ' ' && *( p + i ) != '\0' )
i++;
q = new char[ i + 1 ];//创建一个新的字符数组,存储单词
for( j = 0; j < i; j++ )
q[ j ] = p[ j ];
q[ i ] = '\0';//记得放上结束符
b[ n++ ] = q;//用字符数组中的元素指向新创建的字符数组
p += i;
//以下换行输出,验证是否正确
for( i = 0; i < n; i++ )
printf( "%s\n", b[ i ] );
for( i = 0; i < n; i++ )
delete []b[i];//释放各个字符数组
//测试:输入
// sdkjf skdj d
// 输出
// sdkjf
// skdj
// d
P.S: 或者输入一个完整的英文,如 " I am a genius!" 也可。程序会自动忽略空格。:-) 用C的malloc和free写起来较长,喜欢用C++中的new和delete本回答被提问者和网友采纳
C语言 怎么把字符数组中的字符赋值给字符变量
第一种写法,等同于char a[10] = "abc";第一种写法,用一个字符串赋值,实际上保存了4个字节(包含字符串结束符)。
第二种写法,只赋值了三个字节。
1、char c[5];
c[0]=’H’; c[1]=’e’; c[2]=’l’; c[3]=’l’; c[4]=’o’;
2、charc[5]=‘H’,’e’,’l’,’l’,’o’;
3、(1)如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预测的;
(2)如果花括号中提供的初值个数(即字符个数)大于数组长度,则按语法错误处理;
(3)如果花括号中提供的初值个数(即字符个数)小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即‘\0’);
4、(如何将字符串赋值给字符数组)
C语言中,将字符串作为字符数组来处理的。C语言规定了一个“字符串结束标志”,以字符’\0’作为标志。为此,再对字符数组初始化的方法补充一种用字符串常量来使字符数组初始化方法:
char c[] = “Hello”;
或 char c[] =“Hello”; 注意:数组c的长度不是5,而是6.
上面的初始化等价于:char c[5]=‘H’,’e’,’l’,’l’,’o’,’\0’;
而不等价于:charc[5]=‘H’,’e’,’l’,’l’,’o’;
5、字符数组的输出
char c[] =“Hello”;
printf(“%s”,c);
6、(如何将字符串赋值给字符数组)
strcpy(字符数组1,字符串2)
eg: char str1[10]=’’, str2=“Hello”;
strcpy(str1,str2);
执行后str1状态为:
H
e
l
l
o
\0
\0
\0
\0
\0
(1)“字符数组1”必须写成数组名形式(如str1),“字符串2”可以是数组名,也可以是字符串常量。eg strcpy(str1, “Hello”);
(2)不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。如下面两句都是不合法的:str1=”Hello”;
str1=str2;
而只能用strcpy函数将一个字符串复制到另一个字符数组中去,赋值语句只能将一个字符赋给一个字符型变量或者字符数组元素。如下面的语句是合法的:
char c[5],c1,c2;
c1=’A’;c2=’B’;
c[0]=’H’; c[1]=’e’; c[2]=’l’; c[3]=’l’; c[4]=’o’;
7、strlen函数是测试字符串实际长度(不包含‘\0’在内)的函数。
char c[10]=”Hello”’
printf(“%d”,strlen(c)); 或者Printf(“%d”,“Hello”); 输出为5 参考技术A char szData[5]='A','b','c','d','\\0';//字符数组
char ch = szData[3];// ch 的值为'd'追问
可以把字符数组中的所有字符变成一个字符串赋值给ch吗
追答不能,因为ch是字符,只能存一个字符,存不下字符串,就像就像一个停车位停不了2辆车似的
追问有没有直接把字符数组里所有字符赋值给一个 字符串常量一样的东西
追答常量定义之后是不能修改的,包括字符串常量,但是可以把字符串赋值给字符串,strcpy,strncpy
本回答被提问者和网友采纳以上是关于C语言中怎么把字符数组里的数据存放到字符串数组中的主要内容,如果未能解决你的问题,请参考以下文章