自学C语言--字符串的一些基本操作和一些基本的字符串函数···笔记

一、定义字符串

way-one:字符串常量(用双引号括起来的内容)--静态存储类别

若字符串常量之间没有间隔或用空格隔开,C语言会自动将其串联起来。

e.g.

printf("Hello" "World");

-----HelloWorld

注:要在字符串内部使用双引号,需要在双引号前面加上一个“ \ ”。

way-two:char类型数组

way-three:指向char的指针

二、字符串数组和初始化

1.数组表示法:

一维:char m[ ]=NULL; 和 char m [ 50 ]=NULL;

二维:char [2][10];

2.指针表示法:

一维:char *m = NULL;   

 二维:char *m[ 10] ; 

注:指定数组大小时,要让数组的元素个数至少比字符串长度多1(容纳" \0 ")

三、字符串输入

1、scanf ()函数
2、gets ()函数 

 注:已经不推荐使用了,如果输入的字符串过长,会导致缓冲区溢出。

gets(words);  注 words为字符串数组

3、fgets()函数  

fgets(words,10,stdin) 

为了处理包含空格的字符串,使用fgets()函数

注:第一个参数为数组名。

第二个参数为输入字符的最大数量。若参数为n,则读入n-1个字符,或者遇到第一个换行符为止。

第三个参数指明要读入的文件,若从键盘输入的数据,以stdin作为参数。

其中,fgets()会自动存储换行符。

处理掉换行符方法:

while (words [ i ] != '\n')

i++;

words[ i ] = ' \0 ';

4、gets_s()函数

gets_s(words,10)函数

gets_s()会自动丢弃换行符

若输入的字符串太长有两种处理方法:

1】继续使用超出的字符

#include <stdio.h>
#define STLEN 10
int main(void)
{
    char words[STLEN];
    
    puts("Enter strings (empty line to quit):");
    while (fgets(words, STLEN, stdin) != NULL && words[0] != '\n')
        fputs(words, stdout);
    puts("Done.");
    
    return 0;
}

2】丢弃输入行的超出字符

#include <stdio.h>
#define STLEN 10
int main(void)
{
    char words[STLEN];
    int i;
    
    puts("Enter strings (empty line to quit):");
    while (fgets(words, STLEN, stdin) != NULL && words[0] != '\n')
    {
        i = 0;
        while (words[i] != '\n' && words[i] != '\0')
            i++;
        if (words[i] == '\n')
            words[i] = '\0';
        else // must have words[i] == '\0'
            while (getchar() != '\n')
                continue;
        puts(words);        
    }
    puts("done");
    return 0;
}
5、s_gets()函数   

需要自己写源代码,不能直接使用

char *s_gets(char *st,int n)
{
	char *ret_val;
	int i = 0;
	
	ret_val = fgets(st,n,stdin);
	if (ret_val != NULL)
	{
		while (st[i] != '\n' && st[i] != '\0')
		    i++;
		if (st[i] == '\n')
		    st[i] = '\0';
		else
		    while (getchar() != '\n')
			    continue;
	}
	return ret_val;  //返回指向该字符串的指针 
 } 

四、字符串的输出

1、puts()函数

puts(字符串的地址)

注:puts()在显示字符串时会自动在其末尾添加一个换行符。

被视为地址的东西:双引号括起来的内容是字符串常量,而且被视为该字符串的地址;存储字符串的数组名也被视为地址。

2、fputs()函数

fputs(字符串数组名,stdout)

其中,stdout是标准输出,可以将内容打印在显示器上。

而且fputs()不会自动在末尾添加换行符。

3、printf()函数

五、自定义字符串的输入/输出函数

1、put1()//打印字符串,不添加\n

#include <stdio.h>
void put1(const char *string)
{
	while (*string != '\0')    //while (*string)
	    putchar(*string++);
}

#include <stdio.h>
void put1(const char *string)
{
	int i=0;
	while (string[i]!='\0')
	    putchar(string[i++]);
}

2、put2() // 打印一个字符串,并统计打印的字符数。

#include <stdio.h>
int put2(const char *string)
{
	int count = 0;
	while (*string)
	{
		putchar(*string++);
		count++; 
	}
	putchar('\n');
	
	return 0; 
}

六、字符串函数(包含在string.h)

1、strlen()函数

用于统计字符串的长度。返回字符串长度,不包含\0。

int strlen(const char *s)
{
	int idx=0;
	
	while (s[idx] != '\0')
	{
		idx++;
	}
	return idx;
 } 
2、strcat()函数

用于拼接字符串,把拼接后形成的新的字符串作为第一个字符串,第二个字符串不变。

其中,strcat()函数的类型是char *,strcat()函数返回第一个参数,即:拼接后新字符串的地址。

3、strncat()函数

也用于拼接字符串,第三个参数指定最大拼接字符数。

e.g. strncat(word,words,10);

拼接13个字符或遇到空字符停止。

4、strcmp()函数

用于比较两个字符的大小。

若strcmp(A,A); 返回0;若strcmp(B,A); 返回1;若strcmp(A,B);  返回-1。

说明:如果在字母表中第一个字符位于第二个字符前面,strcmp()中就返回负数;反之,strcmp()则返回正数。若不等,返回的是两个字符串的最后一个字符的ASCII码之差。

int strcmp(const char *s1,const char *s2)
{
	int idx=0;
	
	while (s1[idx]=s2[idx] && s1[idx]!='\0')
	{
		idx++;
	}
	return s1[idx]-s2[idx];
 } 
int strcmp(const char *s1,const char *s2)
{
	while (*s1=*s2 && *s1!='\0')
	{
		s1++;
		s2++;
	}
	return *s1-*s2;
 } 
5、strncmp()函数

strncmp()在比较两个字符串时,可以比较到字符的不同地方,也可以只比较第三个参数指定的字符数。

#include <stdio.h>
#include <string.h>
#define LSTNUM 6
int main() 
{
	const char *list[LSTNUM]=
	{
		"produce","provide",
		"process","probably",
		"problem","preview"
	};
	int cnt=0;
	int i;
	
	for (i=0;i<LSTNUM;i++)
	{
		if (strncmp(list[i],"pro",3)==0)
		{
			printf("Found:%s\n",list[i]);
			cnt++;
		}
	}
	printf("total is %d\n",cnt);
	
	return 0;
}
6、strcpy()函数

该函数第二个参数指向的字符串被拷贝至第一个参数指向的数组中。

拷贝出来的字符串被称为目标字符串,最初的字符串被称为源字符串。

strcpy(目标字符串,源字符串)

7、strncpy()函数

第三个参数指明可拷贝的最大字符数。

8、sprintf()函数

注:声明在stdio.h中。sprintf()的第一个参数是目标字符串的地址,第二个参数是格式化字符串,第三个字符串是待写入项的列表。

e.g.sprintf(words,"%s-%s-%s",a,b,c);

sprintf()把组合后的字符串存储在数组words中而不是显示在屏幕上。

七、字符串排序

选择排序法:for   m=首元素至m=倒数第二个元素

for   m-第二个元素至最后一个元素

比较第n个元素与第1个元素,如果第n个元素更大,交换这两个元素的值。

void strsort(char *strings [] , int n)
{
  char *i;
  int top, seek;
  for (top=0;top<n-1;top++)
  {
   for (seek=top+1;seek<n;seek++)
   {  
    if (strcmp(strings[top],strings[seek])>0)
     {
       i=strings[top];
       strings[top]=strings[seek];
       strings[seek]=i;
     }
   }
  }

八、字符串转换数字

这些函数包含在stdlib.h头文件中。

atoi()函数,把字符串转换成int类型的值。

atof()函数,把字符串转换成double类型的值。

atol()函数,把字符串转换成long类型的值。

strtol()函数,把字符串转换成long类型的值,且可以识别和报告字符串首字符是不是数字。

strtod()函数,把字符串转换成double类型的值,且可以识别和报告字符串首字符是不是数字。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值