关于字符串的操作问题

小小白杨123 2013-05-20 06:22:43
看到一个题目:在键盘上输入数据时候,稍微不小心就会往右移动一位,输入一个错位的字符串,输出打字员本想输出的句子。答案有代码,自己尝试修改了一下,发现了一些问题,请高手解释一下。代码如下
#include <stdio.h>

int main()
{
char *s="1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./";
int i;
int c;
while((c=getchar())!=EOF)
{
for(i=1;s[i]&&s[i]!=c;i++);
if(s[i]) //此句成立的条件是s[i]存在与*s中吗?
putchar(s[i-1]);
else
putchar(c);
}
return 0;
}

当我输入a时,输出的还是a,输入\时候,输出的还是\。输入s,会输出换行。其余的没有问题,谁能解释一下。
...全文
181 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Storm-Shadow 2013-05-21
  • 打赏
  • 举报
回复
那应该是你的编译器的问题,我的编译器在运行这个程序时没出现你所说的错误.
小小白杨123 2013-05-20
  • 打赏
  • 举报
回复
引用 4 楼 huanfengyun 的回复:
其实也没多少毛病了,我只是说相对多而已,for循环里的i应该从0开始,相应的把putchar(s[i-1]);改成putchar(s[i]);就行了.
#include <stdio.h>    
int main()  
{          
	char *s="1234567890-=qwertyuiop[]\\asdfghjkl;'zxcvbnm,./";          
	int i = 0;          
	int c;        
	printf("字符串 S 的内容为:\n");     
	while(s[i])     
	{         
		printf("%c ",s[i]);         
		i++;     
	}     
	printf("\n");       
	while((c=getchar())!=EOF)          
	{           
		for(i=0; s[i] && (s[i] != c); i++);                    
		if(s[i]) //此句成立的条件是s[i]存在与*s中吗?         
		{             
			putchar(s[i]);                  
		}         
		else                
		{             
			putchar(c);              
		}     
	}          
	return 0;  
}
i=0是不行的,当输入1的时候就会出现错误。对吧?
Storm-Shadow 2013-05-20
  • 打赏
  • 举报
回复
其实也没多少毛病了,我只是说相对多而已,for循环里的i应该从0开始,相应的把putchar(s[i-1]);改成putchar(s[i]);就行了.
#include <stdio.h>    
int main()  
{          
	char *s="1234567890-=qwertyuiop[]\\asdfghjkl;'zxcvbnm,./";          
	int i = 0;          
	int c;        
	printf("字符串 S 的内容为:\n");     
	while(s[i])     
	{         
		printf("%c ",s[i]);         
		i++;     
	}     
	printf("\n");       
	while((c=getchar())!=EOF)          
	{           
		for(i=0; s[i] && (s[i] != c); i++);                    
		if(s[i]) //此句成立的条件是s[i]存在与*s中吗?         
		{             
			putchar(s[i]);                  
		}         
		else                
		{             
			putchar(c);              
		}     
	}          
	return 0;  
}
小小白杨123 2013-05-20
  • 打赏
  • 举报
回复
引用 2 楼 huanfengyun 的回复:
这程序问题太多,有毛病,很明显的我就不说了.有点要注意的是字符串中的\a被当成转义符了,你把它打印出来看一下就懂了.
#include <stdio.h>   
int main() 
{     
	char *s="1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./";     
	int i = 0;     
	int c; 

	printf("字符串 S 的内容为:\n");
	while(s[i])
	{
		printf("%c ",s[i]);
		i++;
	}
	printf("\n");

	while((c=getchar())!=EOF)     
	{  
		for(i=1; s[i] && (s[i] != c); i++);           
		if(s[i]) //此句成立的条件是s[i]存在与*s中吗?
		{
			putchar(s[i-1]);         
		}
		else        
		{
			putchar(c);     
		}
	}     
	return 0; 
} 
明白转义字符了,你说还有很多错误,能指点一下吗?
Storm-Shadow 2013-05-20
  • 打赏
  • 举报
回复
这程序问题太多,有毛病,很明显的我就不说了.有点要注意的是字符串中的\a被当成转义符了,你把它打印出来看一下就懂了.
#include <stdio.h>   
int main() 
{     
	char *s="1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./";     
	int i = 0;     
	int c; 

	printf("字符串 S 的内容为:\n");
	while(s[i])
	{
		printf("%c ",s[i]);
		i++;
	}
	printf("\n");

	while((c=getchar())!=EOF)     
	{  
		for(i=1; s[i] && (s[i] != c); i++);           
		if(s[i]) //此句成立的条件是s[i]存在与*s中吗?
		{
			putchar(s[i-1]);         
		}
		else        
		{
			putchar(c);     
		}
	}     
	return 0; 
} 
绯红女王 2013-05-20
  • 打赏
  • 举报
回复
char *s="1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./";
这里错了 char *s="1234567890-=qwertyuiop[]\\asdfghjkl;'zxcvbnm,./"; 少了一个‘\’

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧