之前这快有点迷迷糊糊,我想在指针前来看看这个,看起来好像比较简单
so,我们可以将字符串和我们前面比较熟悉的数组结合起来
字符串常量
用一对双引号括起来的字符序列
一个字符串结束符 '\0',像这个
PS:字符串的有效长度:有效字符的个数
简而言之,字符串即是一个特殊的一维字符数组,
其操作也即是如此:
普通字符数组:数组元素的个数是确定的,一般用下标控制循环
字符串:没有显式地给出有效字符的个数,只规定在字符串结束符 '\0' 之前的字符都是字符串的有效字符,一般用结束符 '\0' 来控制循环
所以我们有了一个very nice的循环条件:s[i] != '\0'
比如看看下面这个题
输出样例:
#include<stdio.h>
int main (void)
{
char ch;
scanf("%c",&ch);
while(ch!='\n')
{
if(ch>='A'&&ch<='Z')
{
if(ch=='Z')
{
ch=ch-'A'+'a'-25;//这里要变化后移一位
}
else
{
ch=ch-'A'+'a'+1;
}
}
else if(ch>='a'&&ch<='z')
{
if(ch=='z')
{
ch=ch-'a'+'A'-25;
}
else
{
ch=ch-'a'+'A'+1;
}
}
printf("%c",ch);
ch=getchar();
}
return 0;
}
ps:我最近还是整理了些我这个水平可能用到的c语言函数库,等会儿来冲
好吧这道题有点那么费脑瓜子(对于不那么熟悉ASCII码来说有点)
那就再来一道[dogc]
#include<stdio.h>
#include<string.h>
int main(void)
{
char a[100];
int i,j;
gets(a);
int len;
len=strlen(a);
for(j=len-1;j>=0;j--)
printf("%c",a[j]);
return 0;
}
还有很典型的凯撒密码
输入一个以回车符为结束标志的字符串,再输入一个正整数offset,用凯撒密码将其加密后输出。
#include <stdio.h>
#include <math.h>
int main(void)
{
unsigned char a[80];
int x = 0;
int y;
int offset;
while( (a[x] = getchar()) != '\n' )
{
x++;
}
scanf("%d", &offset);
if( offset > 0 )
{
y = offset % 26;//这步实在绝,俺是查的[求放过]
for( int i = 0; i < x; i++ )
{
if( a[i] >= 'A' && a[i] <= 'Z' )
{
a[i] += y;
if( a[i] > 'Z' )
{
a[i] -= 26;
}
}
else if( a[i] >= 'a' && a[i] <= 'z' )
{
a[i] += y;
if( a[i] > 'z' )
{
a[i] -= 26;
}
}
printf("%c", a[i]);
}
}
else if( offset < 0 )
{
offset = fabs(offset);
y = offset % 26;
for( int j = 0; j < x; j++ )
{
if( a[j] >= 'A' && a[j] <= 'Z' )
{
a[j] -= y;
if( a[j] < 'A' )
{
a[j] += 26;
}
}
else if( a[j] >= 'a' && a[j] <= 'z' )
{
a[j] -= y;
if( a[j] < 'a' )
{
a[j] += 26;
}
}
printf("%c", a[j]);
}
}
else
{
for( int k = 0; k < x; k++ )
{
printf("%c", a[k]);
}
}
return 0;
}
这个
#include<stdio.h>
#include<string.h>
int main (void)
{
char a[100];
char b[100];
gets(a);
int x,y;
y=0;
x=strlen(a);
int i,j,m,n;
for(i=0;i<x;i++)
{
if(a[i]>='A'&&a[i]<='Z')
{
b[y]=a[i];
y++;//数组b长度
}
}
if(y==0)
{
printf("Not Found");
}
for(i=0;i<y;i++)
{
m=0;
for(j=0;j<i;j++)
{
if(b[i]==b[j])
{
m=1;//标记重复
}
}
if(m==0)
{
printf("%c",b[i]);
}
}
return 0;
}
算了还是丢这里吧
1. 1. ctype.h
2. 2. 1.isalpha():测试一个字符是否为字母,是则返回1,否则返回0。
3. 3. 2.isdigit():测试一个字符是否为数字,是则返回1,否则返回0。
4. 4. 3.isupper():测试一个字符是否为大写字母。
5. 5. 4.islower():测试一个字符是否为小写字母。
6. 6. 5.toupper():将小写字母转成大写字母,并返回。
7. 7. 6.tolower():将大写字母转成小写字母,并返回。
8. 8.
9.
1. string.h
2. 1.strcpy():将一段字符串的内容复制到一个字符数组中。
3. 2.strlen():计算一个字符数组中字符串的长度。不包括null零
4. 3.strcat():合并两个字符数组。
5.
1. stdio.h
2. 1.puts():输出一个字符串。默认在末尾加换行符。
3. 例:puts("www.baidu.com");
4. puts(table); // talbe是一个字符数组
5. 2.gets():获取一个字符串,以Enter结尾.
6. 3.fopen():获取一个文件入口地址
7. 4.fclose():关闭一个文件。
8. 5.fprintf():向文件中输入字符串信息。
9. 6.fgets():读一行数据。
10. 7.fputs():输出数据到文件。
11. 8.feof():检测是否到达文件末尾。
12. 9.fseek():随机访问文件
13.
1. math.h
2. 1.ceil():向上取整,返回值为浮点数
3. 2.floor():向下取整,返回值为浮点数
4. 3.fabs():返回浮点绝对值
5. 4.cos(x):返回角x的余弦值
6. 5.sin(x):返回角x的正弦值
7. 6.tan(x):返回角x的正切值
8. 7.pow():计算一个值的幂
9. 8.sqrt():返回一个值的平方根
10. 9.exp(x):返回e^x的值
11. 10.log(x):返回x的自然对数,数学上写成ln(x)。
12. 11.log10(x):返回以10为基的对数。
13.
1. 1. stdlib.h
2. 2. 1.rand():随机产生一个0到32767的值。如果没有给rand()设置产生随机数的种子,那么它总是生成同样的随机数。
3. 3. 2.srand():设置随机数生成种子。
4. 4.
5. 一个产生正真随机数的例子:
6. 1. #include
7. 2. #include
8. 3. #define NUM_CARDS54
9. 4. time_t t;
10. 5. srand(time(&t));
11. 6. sub_draw = (rand()%(NUM_CARDS));
12. 7.
13. 3.malloc():分配堆内存
14. 例:
15. 1. int *temps;
16. 2. temps = (int *)malloc(10*sizeof(int));
17. 3.
18. 4.free():释放堆内存
19.