栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言入门7:字符串入门

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言入门7:字符串入门

C语言入门7:字符串入门
  • 1. 字符串是什么?
  • 2. 字符串怎么用?
    • 2.1 声明
      • (1)语法
    • 2.2 初始化
      • (1)语法
    • 2.3 输入输出
    • 2.4 访问字符
      • (1)语法
    • 2.5 遍历
      • (1)基本套路
      • (2)示例
    • 2.6 赋值
  • 3. 实践
    • 3.1 练习
      • 3.1.1 统计
      • 3.1.2 查找
      • 3.1.3 替换
      • 3.1.4 逆序/反序

1. 字符串是什么?

存放字符(char)的数组称为字符数组。在C语言中,使用NULL字符(’’)终止的一维字符数组被称作字符串。
字符串的各个元素依次存放各个字符,字符串的变量名代表该数组的首地址。

2. 字符串怎么用? 2.1 声明 (1)语法

字符串初始化方式与普通数组一样。

char 字符串变量名[字符数量];
2.2 初始化 (1)语法

字符串可以按照普通数组初始化方式初始化。

char 字符串变量名[字符数量] = {字符1,字符2,....,''};
char greeting[12] = {'H', 'e', 'l', 'l', 'o',' ','W','o','r','l','d',''};

注意字符串最后一个字符必须是。
字符串有一种更加简单的初始化写法

char 字符串变量名[字符数量] = 字符串字面量;
char 字符串变量名[] = 字符串字面量;
char greeting[12] = "Hello World";
char greeting[] = "Hello World";
2.3 输入输出

字符串输入输出与数值是一样的,使用函数scanf()和printf()。只是占位符不同,字符串格式占位符为%s。
例如:

#include 

int main(){
    char str[1024];
    printf("请输入你的名字:");
    scanf("%s",str);
    printf("你好,%sn",str);
}
2.4 访问字符

字符串的访问方式与数组数字是一样的,按照索引/下标方式访问。

(1)语法
字符数组名[索引]
打印首字符
printf("%cn", greeting[0]);

修改首字符
greeting[0] = 'F';

打印修改后的字符串
printf("%sn",greeting);
2.5 遍历 (1)基本套路
for (int i=0; '' != str[i]; ++i){ // 依次生成字符数组索引
  str[i] // 访问数组的每一个字符
}
(2)示例

实现一个字符串的纵向输出

for (int i=0; '' != str[i]; ++i){ // 依次生成字符数组索引
 printf("%cn",str[i]);
}
2.6 赋值

字符串赋值可以使用遍历的方式

for(int i=0;''!=s[i];++i){
    t[i] = s[i];
}

更便捷的是使用函数strcpy()

strcpy(t,s);

字符串赋值注意事项:
(1)目标字符串长度要大于等于源字符串长度。
(2)目标字符串结尾是’’
有些时候,字符串声明时没有初始化,这时字符串里的值是随机值。需要手动赋值。赋值方式如下所示:

char str[30];
for (int i=0; i<30; ++i){
    str[i] = '';
}
3. 实践 3.1 练习 3.1.1 统计

(1) 输入字符串s,打印出字符串s的长度(不包含’’)。

#include 

int main(){
	char str[30];
	scanf("%s",&str);
	int i=0,count=0;
	for(i;str[i]!='';i++){
		count++;
	}
	printf("str长度为:%dn",count);
}

(2) 输入字符串s和字符c,打印出字符c在字符串s中出现的次数。

#include 

int main(){
	char str[100],c;
	printf("请输入字符串和字符:n");
	scanf("%s %c",&str,&c);
	int i=0,count=0;
	for(i;str[i]!='';i++){
		if(str[i]==c){
			count++;
		}
	}
	printf("str中%c出现的次数为:%dn",c,count);
}
3.1.2 查找

(1) 输入字符串s和字符c,打印出c在字符串s中的第一次出现的位置(第一个字符位置为0,s不包含c返回-1)。

#include 

int FindChar(char *str,char c){
    for (int i=0;str[i]!='';i++){
        if(str[i] == c){
            return i;
        }
    }
    return -1;
}

int main(){
    char str[100],c;
    scanf("%s %c",str,&c);
    int localnum=FindChar(str,c);
    if(localnum!=-1){
        printf("%c在字符串中第一次出现的位置为:%dn",c,localnum);
    }else{
        printf("%c不在字符串中n",c);
    }
}

(2) 输入字符串s和字符c,打印出c在字符串s中的最后一次出现的位置(第一个字符位置为0,s不包含c返回-1)。

#include 

int FindLastChar(char str[],char c){
    int Lastnum=-1;
    for (int i=0;str[i]!='';i++){
        if(str[i] == c){
            Lastnum=i;
        }
    }
    if(Lastnum!=-1){
        return Lastnum;
    }else{
        return -1;
    }
}

int main(){
    char str[100],c;
    scanf("%s %c",str,&c);
    int Lastnum=FindLastChar(str,c);
    if(Lastnum!=-1){
        printf("%c在字符串中最后一次出现的位置为:%dn",c,Lastnum);
    }else{
        printf("%c不在字符串中n",c);
    }
}
3.1.3 替换

(1) 输入字符串s、数字n和字符c ,用字符c替换字符串s中n位置的字符,打印出替换结果。

#include 
#include 

int ReplaceChar(char str[],char c,int n){
    if(n<=strlen(str)-1){
        str[n] = c;
        printf("%sn",str);
    }else{
        printf("Input Error!n");
    }
}

int main(){
    int n;
    char str[100],c;
    printf("请依次输入字符串、字符c和其所替换的位置:n");
    scanf("%s %c %d",str,&c,&n);
    ReplaceChar(str,c,n);
}

(2) 输入字符串s、字符c1和字符c2 ,用字符c2替换字符串s中c1,打印出替换结果。

#include 
#include 

int ReplaceChar(char str[],char c1,char c2){
    for(int i=0;str[i]!='';i++){
        if(str[i]== c1 ){
            str[i] = c2;
        }
    }
    printf("%sn",str);
}

int main(){
    char str[100],c1,c2;
    printf("请依次输入字符串、字符c1和替换c1的字符c2:n");
    scanf("%s %c %c",str,&c1,&c2);
    ReplaceChar(str,c1,c2);
}
3.1.4 逆序/反序

(1) 输入字符串s,打印出字符串s的反序。LeetCode 344. 反转字符串

#include 

void ChangeString(char s1[]){
    int count=0;
    for(int i=0;''!=s1[i];++i){
        ++count;
    }
    for(int i=0;i 

(2) 输入字符串s,判断字符串是否是回文。

#include 
#include 

int ComString(char s1[]){
    int count=0;
    for(int i=0;''!=s1[i];++i){
        ++count;
    }
    for(int i=0;i 

(3) 输入一个年月日时分秒组成的数字,按照XXXX年XX月XX日XX时XX分XX秒打印出来。例如:输入20190311180301,打印出2019年3月11日18时3分1秒。

#include

int main(){
     char year[5];
     char month[3];
     char day[3];
     char hour[3];
     char minute[3];
     char second[3];
     scanf("%4s%2s%2s%2s%2s%2s",&year,&month,&day,&hour,&minute,&second);
     printf("%s年%s月%s日%s时%s分%s秒n",year,month,day,hour,minute,second);
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/353004.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号