字符串处理函数及统计单词个数

一、字符串处理函数

1、puts(字符数组)

其作用是将一个字符串(以'\0'结束的字符序列)输出到终端。假如已定义str是一个字符串数组名,且该数组已被初始化为“China”,则执行

puts(str);

那么终端将显示"China"字符串。由于可以用printf函数输出字符串,因此puts函数用的不多

注:用puts函数输出的字符串中可以包含转义字符,例如

#include "stdafx.h"
#include <Strsafe.h>


int _tmain(int argc, _TCHAR* argv[])
{
	char str[]={"China\nBei jing"};
	puts(str);
	getchar();	
	return 0;
}

输出结果:



 在输出时将结束标志'\0'转换为'n',即输出完字符串后换行

 

2、gets函数

作用是从终端输入一个字符串到字符数组,并且得到一个函数值。该函数值是字符数组的起始地址

例如:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  
	char string[20];
    gets(string);
	printf("The string is:%s\n",string);
    system("PAUSE");	
    return 0;
}

 

 注意:用puts和gets函数只能输出或输入一个字符串,不能写成

puts(str1,str2)或gets(str1,str2)

 

3、strcat函数

一般形式strcat(字符数组1,字符数组2);

strcat是字符串连接的意思,其作用是连接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符串1中,函数调用后得到一个函数值---字符数组1的地址。例如

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  
	char str1[30] = {"People's Republic of"};
	char str2[] = {" China"};
	printf("%s",strcat(str1,str2));
    system("PAUSE");	
    return 0;
}

 运行结果:



 注意:

①字符数组1必须足够大,以便容纳连接后的新字符串。

②连接前两个字符串的后面都有'\0',连接时候将字符串1后面的'\0'取消,只在新串最后保留'\0'

 

4、strcpy和strncpy函数

一般形式

strcpy(字符数组1,字符串2)

作用是字符串复制,即将字符串2复制到字符数组1中,例如

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    char str1[10]="",str2[]={"China"};
	strcpy(str1,str2);
	printf("str1=%s\n",str1);
    system("PAUSE");	
    return 0;
}

 

运行结果:



 

注意:

①字符数组1必须足够大

②字符数组1必须是数组名形式,字符数组2可以是字符串

 

strncpy函数将紫飞虎传2中当前n个字符复制到字符数组1中去。例如

strncpy(str1,str2,2)

作用是将str2中最前面2个字符复制到str1中,取代str1中原有的最前面的2个字符。但复制的字符个数n不应多于str1中原有的字符(不包括'\0')

 

5、strcmp函数

一般形式

strcmp(字符串1,字符串2)

它的作用是比较字符串1和字符串2,例如

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    char str1[10]="abc",str2[]={"China"};
	if(strcmp(str1,str2))
	{
       printf("str1 > str2\n");                     
    }
    if(strcmp("Hello","America"))
    {
        printf("Hello > America\n");
    }
	
    system("PAUSE");	
    return 0;
}

 

 

字符串比较规则:

"A"<"B","a"<"b","a">"A"

 

注意:

①如果字符串1=字符串2,则函数值为0

②如果字符串1>字符串2,则函数值为一个正整数

③如果字符串1<字符串2,则函数值为一个负整数

 

6、strlen函数

它是测试字符串长度的函数,函数值为字符串中实际长度(不包括'\0'在内),例如

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    char str[10]={"China"};
	printf("The length is %d\n",strlen(str));
    system("PAUSE");	
    return 0;
}

 



 输出结果不是10,也不是6,而是5

 

7、strlwr函数

strlwr(字符串)

作用是将字符串中国的大写字母换成小写字母

 

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    char str[10]={"China"};
	printf("The string is %s\n",strlwr(str));
    system("PAUSE");	
    return 0;
}

 

 

 

8、strupr函数

其一般形式为

strupr(字符串)

作用是将字符串中小写的字母转换为大写字母

 

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    char str[10]={"China"};
	printf("The string is %s\n",strupr(str));
    system("PAUSE");	
    return 0;
}

 

 

 

二、统计一句话的单词个数

例子:

输入一行字符,统计其中有多少个单词,单词之间用空格分隔开

#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
	char string[81];
	int i,num = 0,word = 0;
	char c;
	gets(string);
	for (i=0;(c=string[i])!='\0';i++)
	{
		if(c == ' ')word=0;
		else if (word == 0)
		{
			word = 1;
			num++;
		}	
	}
	printf("There are %d words in the line.\n",num);
	getchar();	
	return 0;
}

 

 

运行结果:



 

程序中变量i作为循环变量,num用来统计单词个数,word作为判别是否单词的标志,若word=0表示未出现单词,如果出现单词word就设置成1.

解题思路:

单词的数目可以由空格出现次数决定(连续的若干个空格作为出现一次空格;一行开头的空格不统计在内)。如果测出某一个字符为非空格,而它的面前的字符是空格(通过if(word == 0)来判断),则表示“新单词开始了”,此时使num(单词数)累加1.如果当前字符为非空格而其前面的字符也是非空格,则意味着仍然是原来那个单词的继续,num不应该在累加1,前面一个字符是否空格可以从word的值看出来,若word等于0,则表示前一个字符是空格;如果word等于1,意味着前一个字符为非空格。

 

如果输入"I am a boy",对每个字符的有关参数状态如下:

当前字符

I

a

m

 

a

b

o

y

.

是否空格

Word原值

0

0

1

0

1

1

0

1

0

1

1

1

新单词开始否

Word新值

0

1

0

1

1

0

1

0

1

1

1

1

Num

0

1

1

2

2

2

3

3

4

4

4

4

 

注意:程序中for语句中的“循环条件”为

(c=string[i])!='\0'

它的作用是先将字符数组的某个元素(一个字符)赋给字符变量c。此时赋值表达式的值就应该是该市该字符,然后再判定它是否结束符,这个循环条件包含了一个赋值操作和一个关系操作。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值