
(1)用字符常量逐个初始化数组。例如:
char a[8]={'i','l','o','v','e','y','o','u'};
把8个字符依次分别赋给c[0]~c[7]这8个元素。
如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的。如果花括号中提供的初值个数(即字符个数)大于数组长度,则出现语法错误。
如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即'\0')。
如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。
例如:char c[]={‘c’,‘’,‘p’,‘r’,‘o','g','r','a','m'};
这时c数组的长度自动定为9。也可以定义和初始化一个二维字符数组,例如:
char diamond[5][5]={{'','','#'},{'','#','','#'},{'#','','','','#'},
{'','#','','#'},{'','','#'}};用它代表一个菱形的平面图形。
(2)字符串常量初始化数组。例如:
char c[]={‘c’,‘’,‘p’,‘r’,‘o','g','r','a','m'};
可写为:char c[]={"C program"};
或去掉{}写为:char c[]="C program";
注意:此时数组c的长度不是9,而是10。因为字符串常量的最后由系统加上一个'\0'。上面的初始化与下面的初始化等价。
char c[]={‘c’,‘’,‘p’,‘r’,‘o','g','r','a','m','\0'};
扩展资料:
其定义的一般形式是:char数组名[数据长度]
例如:
char c[10];
c[0]='I';c[1]='';c[2]='l';c[3]='o';c[4]='v';c[5]='e';c[6]='';c[7]='y';c[8]='o';c[9]='u';
以上定义了c为字符数组,包含10个元素。
由于字符型数据是以整数形式(ASCII代码)存放的,因此也可以用整型数组来存放字符数据,例如:
int c[10];
但这时每个数组元素占2个字节的内存单元,浪费存储空间。
字符数组也可以是二维或多维数组,例如:
char c[5][10];
即为二维字符数组。
初始化
字符数组的初始化与数值型数组初始化没有本质区别。但它除了可以逐个给数组元素赋予字符外,也可以直接用字符串对其初始化。
输入输出
字符数组的输入
(1)用getchar()或scanf()的'%c'格式符对数组进行字符赋值。例如,对于数组a[10]:用getchar()赋值:
for(i=0;i<10;i++)
a<i>=getchar();
用scanf()赋值:
for(i=0;i<10;i++)
scanf("%c",&a<i>);
(2)用scanf()的'%s'格式对数组赋值。还是对于数组a[10]:
scanf("%s",a);
或
scanf("%s“,&a[0]);
输入”C program“并回车时,a数组会自动包含一个以”\0“结尾的字符串”C program“。
字符数组的输出
(1)用putchar()或printf()的‘%c’格式符对数组进行字符赋值。例如,对于数组a[10]:用putchar()赋值:
for(i=0;i<10;i++)
a<i>=putchar();
用printf()赋值:
for(i=0;i<10;i++)
printf("%c",a<i>);
输出结果为:
c program
(2)用printf()的'%s'格式对数组赋值。还是对于数组a[10];
printf("%s",a);
输出结果为:
c program
参考资料:
百度百科——字符数组
Qt下面,字符串都用QString,确实给开发者提供了方便,想想VC里面定义的各种变量类型,而且函数参数类型五花八门,经常需要今年新那个类型转换
Qt再使用第三方开源库时,由于库的类型基本上都是标准的类型,字符串遇的多的就是Char类型
在Qt下怎样将QString转char呢,需要用到QByteArray类,QByteArray类的说明详见Qt帮助文档。
因为char最后都有一个‘/0’作为结束符,而采用QString::toLatin1()时会在字符串后面加上‘/0’
方法如下:
Qstring str;
char ch;
QByteArray ba = strtoLatin1();
ch=badata();
这样就完成了QString向char的转化。经测试程序运行时不会出现bug
注意第三行,一定要加上,不可以strtoLatin1()data()这样一部完成,可能会出错。
补充:以上方法当QString里不含中文时,没有问题,但是QString内含有中文时,转换为char就是乱码,采用如下方法解决:
方法1:
添加GBK编码支持:
#include <QTextCodec>
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
然后改变上面的第三行为:QByteArray ba = strtoLoacl8Bit(); toLoacl8Bit支持中文
方法2:
先将QString转为标准库中的string类型,然后将string转为char,如下:
std::string str = filenametoStdString();
const char ch = strc_str();所谓字符串就是多个字符顺序存放并且以0结尾
char c='a';
char a[20]={'a','b','c'};
int b=52;
char s[20];
s[0]=c; s[1]=0; printf("%s\n",s); //输出字符串: a
s[0]=a[0]; s[1]=a[1]; s[2]=a[2]; s[3]=0; printf("%s\n",s); //输出字符串: abc
sprintf(s,"%d",b); printf("%s\n",s); //输出字符串: 52将字符串赋值给一个字符指针:char p="helloworld";
字符串是一个常量是不可以将字符指针的内容赋值给一个字符串(赋值给字符串数组是可以的)的
char str[100];
strcpy(str,p);就可以了
for(i=0;i<100;i++)
{if(p!='\0'&&p!=NULL)
str[i]=p;
else break;
}
大概就是这样了C++ std::string提供了很多种方式,完成字符数组到string类变量的复制,如:
char str[]="hello";
1、string s(str); //构造函数,用C字符串str初始化
2、string s=str; //复制构造函数
3、string s ;
s=str ; //重载=运算符,完成复制
4、string s ;
sinsert(0,str);//向一个空串中,插入C字符串
5、string s;
s+=str ; //重载+=运算符,把str连接到当前字符串(空串)结尾C++把一个字符串用指针赋值给另一个字符串
#include<iostream>
#include<string>
using namespace std;
int main()
{
char s[]="asdfghjk",b[20];
strcpy(b,a); 直接使用字符串拷贝就可以了
cout<<b;
return 0;
}
如果是char b = a的话只是把a和b所指向的内存一样,如果修改了a的值则b的值也会同时进行修改。如果是 for(int i=0;i<20;i++) (b+i)=(s+i);或strcpy(b,a)则修改a的值不影响b;
我不明白你函数strassign里for语句里没有给DATA[]里考备字符串,而且没有将该字符串传出来啊,你可以向楼上说的看看头文件里STRCPY函数怎么写的。打开stringh就行。
C语言怎么把一个字符串用另一个字符串替换 #include<stringh>
char str1[10]="qwertyuio";
char str2[5]="abcd";
strcpy(str1,str2);
这样1中的内容会被2种替换;
(1中的空间大小必须足够容纳2,不然会有问题的)
直接不能赋值
要strcpy(str,arg);
当然str要比arg长,不然还是错误
这个就是strcat()函数的功能,这里有个例子你可以参考一下:
char strcat(char strDes, const char strSrc)
{
assert((strDes != NULL) && (strSrc != NULL));
char address = strDes;
while (strDes != '\0')
++ strDes;
while ((strDes ++ = strSrc ++) != '\0')
NULL;
return address;
}
c++把一个字符串加到另一个字符串后面的涵数
strcat(char[],char[]);
C++中定义字符串类型的变量用加号即可实现
如:string str1="I am"
string str2="student"
str1=str1+str2;
这时str1为“I am student”
#include<stringh>
strcpy(目的串名,源 *** 作串名);
用字符串函数,strcpy();
如,
char a[10]="my",b[]="hello!";
strcpy(a,b); 将b中字符串拷贝到a中。
printf("%s",a);
其中,a的长度必须大于b;
不知道你具体需要什么。这只是一个方法,具体需要怎样需要你自己去变通!
必须要保证dest足够长,这个我没有判断,代码如下。
int length = strlen(src); 得到src的长度
for(int i = strlen(dest)-1; i >= pos; i--)dest[i+length] = dest[i];dest中pos之后的元素后移
for(int j = pos; j < pos+length; j++)dest[j]=src[j-pos];插入元素
printf("%s",dest);
java中字符串是一个常量,存储在常量池中,字符串的值不能变的,但是可以改变指向他们的引用:
String str1="avd";
String str2="avd";
String str3="abc";
这里str1和str2指向常量池的同一块内存对象avd,常量池中的avd是不能改变的,因为string是final类型,如果但是可以通过
str1="abc";改变str1引用变量的指向内存地址,这样str1指向的值变为abc了
#include <stdioh>
#include <stringh>
int main(){
char p[30];
strcpy(p,"hello"); //用这个函数可以给字符数组赋值。
printf("%s",p);
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)