字符串的定义和输入、处理

字符串的定义和输入、处理,第1张

字符串定义和输入、处理 字符串的定义

可以通过字符数组或字符指针来定义字符串,也可以用宏定义对常量字符串进行定义。 一维的情况如下:

char string0[10];     //定义个长度为10的字符串,但未赋值
char string1[]="prison break";   //定义了一个字符数组string1,并进行初始化,使得其长度自动为13(字符  串”prison break"中的字符个数加上结尾的'')
char string2[100]="michael scofield";     //定义了一个有100个元素的字符数组string2,并初始化了17个元素("michael scofield";加上结尾的'');

二维的情况下: 

char string3[6][30];
char string3[6][30]={"joy","phosee","monses","chandele","ross","rather"};   //此句表示有6个字符串,每个字符串的长度最多为30,每个字符串的初始值
与"joy","phosee","monses","chandele","ross","rather"相对应;   

字符指针定义字符串:

char *str2  = "HelloWorld";  
char *str2;          
​

在储存空间中,通过定义指针来定义字符串时,系统会把指针分配到静态储存空间中,给指针赋值并不能结束这种状态,此时使用指针可能出错,但是指针指向某一个变量可以结束这种状态也可以通过a = (char *)malloc(100)来暂时分配指针动态空间。

char b[10]="ddd";
char *a;
a="aaa"    //
           
//strcpy(a,"ff");   不会报错,但是运行不了
         
printf("a=%sn",a);
printf("b=%sn",b);
return 0;

宏定义对常量字符串进行定义:

#define str3 "HelloWorld";  // 通过宏定义来定义字符串"HelloWorld",等价于str3="HelloWorld"
字符串的输入

用scanf来输入:

char a1[10];
scanf( "%s",a1);   //字符串是可以以scanf来以%s的形式来输入的

缺点:

    由于scanf是遇到空格键和回车键来结束输入的,所以当我们遇到形如prison break来输入时,打出空格就结束了,所以无法经行输入。

    由于scanf会遇到空格键来结束字符串,有时候会输入紊乱,所以我们有时会用gets()来吸收回车键n

解决办法:

    scanf("%[^n]",string);根据scanf的用法我们可以这样来写,这样可以直接拍拖这样==空格问题==的麻烦

    直接用其他方式。

用gets()来输入
#include
int main()
{
    char *buf;
    //char buf[100];
    gets(buf);
    puts(buf);
}
字符串处理

字符串通常来说就是单个字符连起来的数组,处理的时候也是可以按照数组的形势来处理的

如:

char str[] = "hello world";//定义一个字符数组
int len = strlen(str),i;//获取字符数组的长度
for (i = 0; i < len; i++) 
{
    printf("%c", str[i]);
}

这里主要说通过指针定义的字符串:

一串代码直接解决问题:

#include
#include
 
int main()
{
    int i;
    
    char *p = "hello world";
    len = strlen(p);
    for (i = 0; i < len; i++) 
    {
        printf("%c", *(p++));          //使用指针的方式遍历字符数组,
    }
    for (i = 0; i < len; i++) {
        printf("%c", *(p+i));          //推荐这种方式
    }
    return 0;
}

这里即显示了指针形式的字符串做便利处理时的方法,有表明了怎么便利处理字符串里一个字符。

当然输出字符串时还是要printf("%s", p);。

字符串做函数参数
#include 
#include 
#include 
void fun(char *p)
{
    //p = (char *)malloc(100);
    strcpy(p,"hello world");
    printf("p=%sn",p);
}
 
int main()
{
    char *str=NULL;
    char b[10]="sdas";
    str=b;
    fun(str);
    printf("b=%sn",str);
    return 0;
}

这里即说明了子函数接受参数时的void fun(char *p)又说明了主函数传递参数时的fun(str)。

但是应该注意一下几个问题:

    当参数即fun()的括号内是数组时,即可随便使用,但是当括号里面是指针名字的时候,在这之前必须要把指针指向某一个数值才能使用。

    说明一下p = (char *)malloc(100);是给指针暂时分配动态空间,当指针没有指向其他时,则给指针暂时分配空间,当已经指向其他时,则可以接触指向。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5714299.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存