问题继续。。。
狂啃C中。。。问题实在是很多啊,还要各位指教咯~把问题整理了下
1.main(){
char *s="\ta\018bc";
for(;*s!="\0";s++){
printf("***");
}
getch();
}
为什么循环会一直做下去?
2.int a[5];
int *p=a=1000;
为什么对了?
3.#include "stdio.h"
#include "string.h"
main(){
void xinchuan(char *p);
char a[100],*s;
s=a;
xinchuan(s);
getch();
}
void xinchuan(char *s){
int i,n;
printf("Please input a string;\n");
scanf("%s",s);
n=strlen(s);
for(i=0;i<2*n-1;i++){
if(*(s+i)!=' ')
{
strcpy(s+i+2,s+i+1);
*(s+i+1)=' ';
}
}
*(s+i)='\0';
printf("%s",s);
}
本来是想让输入个字符串如“abcdef”然后转换成“a b c d e f”的,结果老失败,不知错在何方~还是要大家帮忙啊~
----------------解决方案--------------------------------------------------------
指针还不会..学习中
----------------解决方案--------------------------------------------------------
*s!="\0"
恕我愚昧,这是啥意思
----------------解决方案--------------------------------------------------------
回LS:
省略的部分吧..
----------------解决方案--------------------------------------------------------
1 你是在拿char和char*在比较,在我的C编译器上给出了char和char*转换的警告,在C++上报错。应该使用*s!='\0'或者*s!=0或者直接for(...;*s;...)...
2 我的编译器报错,无论是C还是C++……
3 给你一个实现。
/********************************************************
** Highlight software by yzfy(雨中飞燕) http://yzfy.org *
*********************************************************/
#include <stdio.h>
#include <string.h>
char* NewString(char *p);
int main()
{
char a[100];
printf("Please input a string;\n");
scanf("%s",a);
printf("%s\n", NewString(a));
getchar();
return 0;
}
char* NewString(char *s)
{
int i,n=strlen(s);
for (i=2*(n-1);i>0;i--)
{
if (i%2)s[i]=' ';
else s[i]=s[i/2];
}
s[2*n-1]='\0';
return s;
}
** Highlight software by yzfy(雨中飞燕) http://yzfy.org *
*********************************************************/
#include <stdio.h>
#include <string.h>
char* NewString(char *p);
int main()
{
char a[100];
printf("Please input a string;\n");
scanf("%s",a);
printf("%s\n", NewString(a));
getchar();
return 0;
}
char* NewString(char *s)
{
int i,n=strlen(s);
for (i=2*(n-1);i>0;i--)
{
if (i%2)s[i]=' ';
else s[i]=s[i/2];
}
s[2*n-1]='\0';
return s;
}
----------------解决方案--------------------------------------------------------
回复 5# 的帖子
诶~谢谢啦~不过第一题我是用WIN-TC的啦,就一直循环下去了,这些都是谭浩强的那本习题集上的,发现很多很BT的啊
----------------解决方案--------------------------------------------------------
main()
{
char *s = "\ta\018bc";
for(;*s != "\0"; s++) // 因该是'\0'
{
printf("***");
}
getch();
}
----------------解决方案--------------------------------------------------------
int a[5];
int *p = a = 1000; // a 是常量
如果不是TC的话,把int类型赋给指针类型也会报错。
----------------解决方案--------------------------------------------------------
// strcpy() 不能拷贝两个重叠的字符串
// 用哪个函数拷贝忘了,所以自己写了一个
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void xinchuan(char *p);
char * str_mov(char * strDest, char * strSrc);
int main(void)
{
char a[100], *s;
s = a;
xinchuan(s);
getchar();
return 0;
}
void xinchuan(char *s)
{
int i, n;
printf("Please input a string;\n");
gets(s);
n = strlen(s);
for(i = 0; i < n * 2 - 1; i++)
{
if(*(s + i) != ' ')
{
str_mov(s + i + 2, s + i + 1);
*(s + i + 1) = ' ';
}
}
*(s + i) = '\0';
printf("%s", s);
}
char * str_mov(char * strDest, char * strSrc)
{
int i = 0;
char * pSrc;
if(!strDest || !strSrc)
return NULL;
else if(strDest == strSrc)
return strDest;
while(strSrc[i])
i++;
pSrc = (char *)malloc(i + 1);
i = 0;
while(pSrc[i] = strSrc[i])
++i;
i = 0;
while(strDest[i] = pSrc[i])
++i;
free(pSrc);
return strDest;
}
----------------解决方案--------------------------------------------------------
回复 6# 的帖子
1 如果编译不出错,的确会一直循环过去:因为*s是永远不会等于"\0"这个字符串的地址的(不会有这么巧的事情吧?事实上不可能,因为编译器不会把字符串放在0~255的地方里面,那里是用来放中断地址的……)。同时,那本书上的习题其实没什么错误。我看是你自己不小心,把“"”输成了“'”才造成这样的后果……2 C是弱类型的语言,而C++不是。还是建议向C++学习,要发现类型不一样的时候转换一个,这样容易发现错误,别都让编译器自己转换了……
3 字符串移动?说实在的这样的算法效率会很低……不过如果你真的要这么做的话……有memmove……
----------------解决方案--------------------------------------------------------