字符数组与字符串常量
- 实现字符输入:scanf(“%c”,&c);getchar(c)
- 实现字符串输入:scanf(“%s”,c);gets(c)
- sizeof()与strlen( )的区别:结构上sizeof是运算符,strlen是函数,功能上,sizeof求的是所占字节数,strlen算的是字符串长度(不包括‘\0’),需要引用头文件。
-
常量区:
- 不可以修改:
整型常量 :10
浮点常量:1,24
字符常量:‘a’
字符串常量
地址常量&a,数组名,函数名,char buf[10] = "abcdef"; char* p = "abcdef"; //buf++ 不合法,++对buf进行,buf数组名地址常量,常量区的不可以进行修改 //p++ 合法,++对p进行的, p变量是在函数内定义的变量存放在栈区,可以进行修改。 //*buf++不合法,*与++都是第二级运算符,从右到左运算,先进行++运算,++对buf进行,buf数组名常量区,不能修改常量区 //*p++合法,先进行++运算++对p进行,p在函数内定义局部变量栈区。 //(*buf)++合法 ( )优先级高,先进行括号内运算,,*buf==*&buf[0]==buf[0];数组在函数内定义局部变量栈区,数组中每一个元素都在栈区可以修改 //(*p)++不合法,*p=a,在常量区 //(*p)++ *p==*(字符串首个字符的地址)常量区中’a'的地址,“ ”字符串常量,那么它里边的每个字符也都是在常量区的
字符串习题
-
判断字符串是否回文("abcba")
判断首尾字符是否一样,当i<j时循环结束 -
#include <stdio.h> #include<string.h> int main() { char str[100]; gets(str); int j = strlen(str) - 1; int i = 0; while (i < j) { if (str[i] != str[j]) { printf("0"); return 0; } i++; j--; } printf("1"); return 0; }
将字符串转换成小写字母
#include <stdio.h> #include<string.h> int main() { char str[100]; gets(str); for (int i = 0;str[i]!='\0'; i++) { if (str[i] >= 'A' && str[i] <= 'Z') { printf("%c", str[i] + ('a' - 'A')); } else { printf("%c", str[i]); } } return 0; }
将字符串进行单词内部的反转
创建一个函数,实现单词内的反转。 -
#include <stdio.h> #include<string.h> void exchange(char* str, int start, int end) { while (start < end) { int temp = str[start]; str[start] = str[end]; str[end] = temp; start++; end--; } } int main() { char str[100]; gets(str); int end = strlen(str); int start = 0; for (int i = 0; i <= end; i++) { if (str[i] == ' ' || str[i] =='\0') { exchange(str, start, i - 1); start = i + 1; } } printf("%s", str); return 0; }
在字符串的单词间做逆序调整,也就是说,字符串由一些由空格分隔的部分组成,你需要将这些部分逆序。(先整体反转,再将单词反转过来)