前言
基本上所有基础的内容都交给你了,就剩下一个字符串没讲了。
在c语言中是没有字符串这个东西的,我们只能用字符数组来存储一个字符串。
但是在c++中我们可以直接定义一个字符串类型的变量,这两个是不同的。本章主要讲字符数组。
字符的输入与输出
c语言写法
#include <cstido>
#include <cstring>
char x;
char a[100];
int main()
{
int i;
//字符变量,需要加取址符&
scanf("%c",&x);
printf("%c",x);
//字符串不需要加取址符
scanf("%s",a);
printf("%s",a);
return 0;
}
c++写法:
#include <iostream>//头文件不一样
#include <cstring>
using namespace std;
char a[100];
char x;
int main()
{
cin>>x;
cout<<x;
cin>>a;
cout<<a;
return 0;
}
c++的输入输出简单粗暴,连变量类型也不要输入。但是暂时不推荐用。
注意:字符数组中字符串的输入都是从第零位开始的。
顺便说下:一个字符占一个字节,一个INT占四个字节,其他的可以自己查查。
例题
现在我们通过题目来了解一下字符数组的遍历。注意这里面有很多知识点的。
题目链接:https://www.luogu.com.cn/problem/P1055
题目很简单,将所有的数字加起来(除最后一个数字)对11取模后与最后一位进行对比。符合条件就是right,否则输出正确的号码
#include <cstdio>
#include <cstring>
char str[100];
int ans = 0;
int sit = 1;
int main()
{
int i;
scanf("%s",str);
//strlen(str)会返回字符串str的长度
//这里为什么要减2呢?因为最后两个字符是不需要参与运算的,少循环一次是一次
for(i=0;i<strlen(str)-2;i++)
{
//论数字字符如何转化成整型数字
if(str[i] - '0' >=0 && str[i] - '0' <= 9)//是数字的话
{
ans += (str[i] - '0') * sit;
sit++;
}
}
if(ans % 11 == str[strlen(str)-1] - '0' )printf("Right");
else if(ans % 11 ==10 && str[strlen(str)-1] == 'X')printf("Right");
else
{
for(i=0;i<strlen(str)-1;i++)printf("%c",str[i]);
if(ans % 11 != 10)printf("%d",ans%11);
else printf("X");//各种细节
}
return 0;
}
再次再总结一下几个常用的函数(好像需要cstring库)
strcmp(str1,str2)/strncmp(str1,str2,n)
这个函数是用来比较两个字符串是否相等的,如果相等那么其值为0
如果str1<str2会返回负数;str1>str2,则返回正数。
字符串大小的比较是根据字典序来的。“a”<“b” “aa”<“ab”<“bb”
这个strncmp是将str1和str2的前n个字符进行比较。
strcpy(str1,str2)/strncpy(str1,str2,n)
这个是用来复制函数的,它会将str2的值赋给str1中。strncpy讲str2前n个字符复制给str1。
strcat(str1,str2)/strncat(str1,str2,n)
将你可以理解为str1 = str1+str2 但是不能这样写。
memset(str,0,sizeof(str))
这个是将数组初始化,什么类型的数组都可以,在函数中声明的局部变量的初始值并不为零。需要初始化。
目前就这么多。