今天用C语言做了一个简单的用户登录注册存取款等功能的系统,发现有很多功能并不会实现,大概是使用Java太多了导致许多C的知识都忘记了,现在把碰到的问题总结如下:
1、字符串复制问题
java等一些编程语言使用习惯了我们经常会用
String s1 = "abc",String s2 = s1
这种方式来给字符串赋值,但C语言一般使用的是char[]数组来存储字符串,所以在赋值的时候不可以使用单纯的赋值符"=",使用的是string.h头文件中包含的strcpy函数。如:
char a[20]; char b[20]; strcpy(a,b);
这样可以实现将b的值赋值给a。
2、字符串分隔问题
Java分隔字符串有专门的split函数来实现,C语言也有专门的函数实现,下面是一个实例:
char *p; char StrLine[10] = “a;b;c”; p = strtok(StrLine,";"); while(p != NULL){ printf("%s\n",p); p = strtok(NULL,";"); }
strtok函数:
原型:char *strtok(char s[], const char *delim);
介绍:分解字符串为一组字符串。s为要分解的字符,delim为分隔符字符(如果传入字符串,则传入的字符串中每个字符均为分割符)。首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL。
3、字符串转数字问题
例如现在有int a[3]={'1','2','3'}一个一维数组,如果要将其转换为123这个数字,我们可以这样:
1)计算a的长度,假设为n
2)分别将a[0]~a[n-1]转换为数字
3)这个数字就等于a[0]*10n-1+a[1]*10n-2+...+a[n-1]*100
这种方法确实可以实现,但是这种方法一是费时间二是费内存。
所以C语言有一个函数可以实现这种功能:atoi(a):
int atoi(const char *nptr) 函数会扫描参数 nptr字符串,会跳过前面的空白字符(例如空格,tab缩进)等。如果 nptr不能转换成 int 或者 nptr为空字符串,那么将返回 0 。特别注意,该函数要求被转换的字符串是按十进制数理解的。