编程基础C—— 详谈字符串 与 字符数组的定义与应用
字符串存储以 ’\0’ 结束,如果一段存储区域有多个 ’\0’ ,则取第一个为结束标志
使用字符串处理函数:
(1)在使用字符串处理函数时,应当在程序文件的开头用
#include <string.h>
(2)puts 每次只能打印一个字符串,且自带回车。puts(字符数组地址)
(3)gets 可以接收空格,但是不能录入多个字符串。gets(字符数组地址)
(4)当我们用scanf输入一个字符串时,会将空格作为字符串的结束符。
如果利用一个 scanf 函数输入多个字符串,则应在输入时以空格分隔,
例如:
char str1[5],str2[5],str3[5];
scanf(“%s%s%s”,str1,str2,str3);
输入数据:
How are you? 回车
(5)strlen(字符数组) 测试字符串长度函数,结果值为字符串的实际长度(不包括\0在内)值的类型为(unsigned long int)无符号长整形。
(6)strcpy(str1,str2) 字符串复制函数 ,将str2复制给str1,str1,str2也可以是字符串。
(7)strcat (str1,str2)字符串串连接函数,将str2接到str1的后面,结果存放在str1中。
(8)strcmp(str1,str2)字符串比较函数,将两个字符串自左至右逐个字符比较(按ASCII码值大小比较),直到出现不同的字符或遇到’\0’为止返回值为整形数值。if(strcmp(str1,str2)>0 / =0 / <0).
字符串比较函数逐个字符(ASCII)进行比较,比较的结果就是差值,值>0时 前>后,=0 时 前=后,<0 时 前<后
例;
//自定义函数,实现字符串的比较,不能用strcmp;
#include <stdio.h>
void funstrcmp(char a[],char b[])
{
int i=0,result = 0;
for(i=0;i<5;i++)
{
if ((a[i]!=b[i])&&(a[i]!='\0')&&(b[i]!='\0'))
{
result = a[i]-b[i];
#include <stdio.h>
void funstrcmp(char a[],char b[])
{
int i=0,result = 0;
for(i=0;i<5;i++)
{
if ((a[i]!=b[i])&&(a[i]!='\0')&&(b[i]!='\0'))
{
result = a[i]-b[i];
}
}
printf("result = %d",result);
}
int main(int argc, const char * argv[])
{
char a[]="abcd";
char b[]="abde";
funstrcmp(a,b);
return 0;
}
printf("result = %d",result);
}
int main(int argc, const char * argv[])
{
char a[]="abcd";
char b[]="abde";
funstrcmp(a,b);
return 0;
}
//自定义函数,实现字符串的拷贝,不能用strcpy;
#include <stdio.h>
#include <string.h>
void myStrCpy(char b[],char a[]){
for (int i = 0; i < strlen(a); i++) {
b[i] = a[i];
}
b[strlen(a)] = '\0';
}
int main(int argc, const char * argv[]) {
char a[] = "my";
char b[20];
myStrCpy(b, a);
printf("b = %s\n",b);
return 0;
#include <stdio.h>
#include <string.h>
void myStrCpy(char b[],char a[]){
for (int i = 0; i < strlen(a); i++) {
b[i] = a[i];
}
b[strlen(a)] = '\0';
}
int main(int argc, const char * argv[]) {
char a[] = "my";
char b[20];
myStrCpy(b, a);
printf("b = %s\n",b);
return 0;
}
应用实例:
1.输入一个字符串,然后得到其倒序形式,并输出,如原始字符串是:abc,处理之后输出cba
第一种方法:
#include<stdio.h>
#include<string.h>
#include<string.h>
int main()
{
printf("请输入字符串:");
char a[100];
char b[100];
gets(a);
for (int i=0;i<=strlen(a);i++) {
b[i]=a[strlen(a)-1-i];
char a[100];
char b[100];
gets(a);
for (int i=0;i<=strlen(a);i++) {
b[i]=a[strlen(a)-1-i];
}
b[strlen(a)]=‘\0’;
printf("倒序字符串为:");
puts(b);
return 0;
return 0;
}
第二种方法:
#include <stdio.h>
#include <string.h>
void fun(char a[])
{
char t;
unsigned long int j,i;
j = strlen(a);
for(i =0;i< j/2;i++)
{
t=a[i];
a[i]=a[j-1-i];
a[j-1-i]=t;
}
printf("倒序为:");
puts(a);
}
int main(int argc, const char * argv[])
{
char b[100];
printf("请输入一个字符串:");
gets(b);
fun(b);
return 0;
#include <string.h>
void fun(char a[])
{
char t;
unsigned long int j,i;
j = strlen(a);
for(i =0;i< j/2;i++)
{
t=a[i];
a[i]=a[j-1-i];
a[j-1-i]=t;
}
printf("倒序为:");
puts(a);
}
int main(int argc, const char * argv[])
{
char b[100];
printf("请输入一个字符串:");
gets(b);
fun(b);
return 0;
}
2.输入一个字符串,然后将其中的单词个数统计出来并打印
#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[])
{
int n=1;
unsigned long int i=0;
char a[100];
printf("请输入一个字符串:");
gets(a);
for(i=0;i<strlen(a)+1;i++)
{
if(a[i]==' '&&a[i+1]!=' ')
n++;
}
printf("单词的个数为:%d",n);
return 0;
#include <string.h>
int main(int argc, const char * argv[])
{
int n=1;
unsigned long int i=0;
char a[100];
printf("请输入一个字符串:");
gets(a);
for(i=0;i<strlen(a)+1;i++)
{
if(a[i]==' '&&a[i+1]!=' ')
n++;
}
printf("单词的个数为:%d",n);
return 0;
}
结合实例希望对大家学习字符串 与 字符数组有所帮助!
感谢您的访问!
若对您有帮助或有兴趣请关注博客:http://www.cnblogs.com/Rong-Shengcom/
分类:
C
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?