看了一些面试题。看起来挺晕的。今天自己实现了一个。出不来,就有了下面的笔记。
题目
编写一个函数,把char组成的字符串循环右移n位。比如原来是“abcdegfhi” n=2位移后是"hiabcdefg"
我直接翻答案。,又是strncpy又是memset又是memcpy,因为c语言复制从来都是从第一位开始复制。所以我看得直晕,没有办法首先该方法。
上题目:
//pStr是指向\0结尾的指针
//steps是要求移动的n
void moveloop(char *pStr,int steps){
//请填充
}
平台是vs2005
正确方法:
- // pointandarray.cpp : 定义控制台应用程序的入口点。
- //
- #include "stdafx.h"
- #include "stdio.h"
- #include "string.h"
- #include "process.h"
- void loopmove(char *pStr,int steps);
- int main()
- {
- char pStr[]={'a','b','c','d','e','f','g','h','i'};
- loopmove(pStr,2);
- printf("pStr=%s",pStr);
- system("pause");
- return 0;
- }
- /**
- 草稿
- step=2 *pStr=hiabcdefg
- *pStr=abcdefg hiabcdefg hi
- */
- void loopmove(char *pStr,int steps){
- int len=9;
- char str[18];
- for(int i=0;i<len*2;i++)
- str[i]=*(pStr+(i%len));
- char newstr[10];
- for(int i=0,j=len-steps;j<len*2-steps;j++,i++)
- newstr[i]=str[j];
- newstr[9]='\0';
- strcpy(pStr,newstr);
-
- }
下面是开始的时候我理解错了的方法。
main里面
- char *pStr=“agcdefghi”;
- 后面的完全一样。
- 除了strlen(pStr)的值等于9,而正确方法中我直接数出来的。
除了最后一个意外都正常。结果到了最后一个无论是strcpy还是strncpy还是memcpy都不行。加上\0也不行。
重新新建test项目
- // test.cpp : 定义控制台应用程序的入口点。
- //
- #include "stdafx.h"
- #include "string.h"
- #include "process.h"
- int _tmain(int argc, _TCHAR* argv[])
- {
- char *pStr"abcdefghi";
- char newstr[]={'h','i','a','b','c','d','e','f','g'};
- //strcpy(pStr,newstr);
- *pStr='b';
- printf("%s",pStr);
- system("pause");
- return 0;
- }
编译,报错。*pStr后面用双引号也不行。说const不能再次赋值。原来是const的问题。在char *里面默认是const类型的。而int *是可以改的。
int *的代码
- // pointandarray.cpp : 定义控制台应用程序的入口点。
- //
- #include "stdafx.h"
- #include "stdio.h"
- #include "string.h"
- #include "process.h"
- #define N 100
- void loopmove(char *pStr,int steps);
- int main()
- {
- int x=1,y=2,z[10]={1,2,3,4,5,6,7,8,9,10};
- int *ip;
- ip=&x;//ip指向x
- y=*ip;//y的值现在是1
- printf("y=%d\n",y);
- *ip=0;//x值现在是0
- printf("x=%d\n",x);
- ip=&z[0];//ip指向z[0]
- printf("ip值现在是%d\n",*ip);
- printf("z[5]=%d",*(ip+5));
- system("pause");
- return 0;
- }
下面是废话的时间了。简单来说在vs下面
int *p1;相对而言这个指针可以随便改。
char *p2;这个编译器默认为时const类型。我在vs下面也用的是cpp.
群里面就吵开了。说有的编译器是常量,有的不是常量,哪怕是const也能改。还有说编辑器相关。我还是看看卡卡西同学的帖子数组和指针的帖子吧。C语言果然很古怪。
阅读(1855) | 评论(0) | 转发(0) |