12 void func(char instr[],char outstr[])
13 {
14 int i = 0;
15 int n = strlen(instr);
16 for(i = 0; i < n; i++)
17 {
18 outstr[i] = instr[n-1-i];
19 }
20 outstr[n] = '\0';
21 printf("%s\n",outstr);
22 }
23 int main(void)
24 {
25 char instr[100] = {};
26 char outstr[100] = {};
27 printf("input a string:\n");
28 scanf("%s",instr);
29 printf("%d\n",strlen(instr));
30 func(instr,outstr);
31
32 return 0;
33 }
代码如上,为什么instr里面含有空格,strlen函数求的值只有空格前的字符?要怎么改?
c语言字符串逆反带空格
答案:4 悬赏:30 手机版
解决时间 2021-03-01 10:10
- 提问者网友:临风不自傲
- 2021-02-28 09:15
最佳答案
- 五星知识达人网友:青灯有味
- 2021-02-28 10:17
#include<stdio.h>
#include<string.h>
void func(char instr[],char outstr[])
{
int i = 0;
int n = strlen(instr);
for(i = 0; i < n; i++)
{
outstr[i] = instr[n-1-i];
}
outstr[n] = '\0';
printf("%s\n",outstr);
}
int main(void)
{
char instr[100] ;
char outstr[100] ;
printf("input a string:\n");
gets(instr);
printf("%d\n",strlen(instr));
func(instr,outstr);
return 0;
}
这句scanf("%s",instr);
因为%s,在输入时遇到空格结束输入。不能将带有空格的字符串输入
#include<string.h>
void func(char instr[],char outstr[])
{
int i = 0;
int n = strlen(instr);
for(i = 0; i < n; i++)
{
outstr[i] = instr[n-1-i];
}
outstr[n] = '\0';
printf("%s\n",outstr);
}
int main(void)
{
char instr[100] ;
char outstr[100] ;
printf("input a string:\n");
gets(instr);
printf("%d\n",strlen(instr));
func(instr,outstr);
return 0;
}
这句scanf("%s",instr);
因为%s,在输入时遇到空格结束输入。不能将带有空格的字符串输入
全部回答
- 1楼网友:千夜
- 2021-02-28 13:25
反转字符串为何要这么麻烦。。
void reverse(char s[])
{
int i,j,c;
for(i = 0, j = strlen(s)-1; i < j; ++i,--j)
{
s[c] = s[i];
s[i] = s[j];
s[j] = s[c];
}
}空格不是strlen的问题,是scanf的问题,scanf读取到空格就认为字符串结束了没有继续往下读取,可以自己写一个读字符串的函数,如下
void getline(char s[])
{
int c,i = 0;
while((c = getchar()) != EOF && c != '\n')
s[i++] = c;
if(c == '\n')
s[i++] = c;
s[i] = '\0';
} 亦可以直接使用gets函数读取一整行
- 2楼网友:青尢
- 2021-02-28 12:18
通过gets输入字符串后就开始遍历字符串,如果字符不是空格直接输出并向后遍历,如果是空格输出一个空格,并向后遍历直到不是空格为止,不作输出处理。 参考代码: #include<stdio.h> int main() { int i; char a[100]; gets(a); for(i=0;a[i]!='\0';){ if(a[i]==' '){//如果是空格输出一个空格,并向后遍历直到不是空格为止,中间不输出 printf(" "); while(a[i]==' ') i++; } else{//如果字符不是空格直接输出并向后遍历 printf("%c",a[i]); i++; } } printf("\n"); return 0; }
- 3楼网友:舍身薄凉客
- 2021-02-28 10:42
同意一楼关于空格问题的说法。但是一楼给出的代码有点小瑕疵:
首先,反转字符串的代码中的for循环体内只是将数组的下标互换,并未将对应的元素交换;
其次,读取字符串的那个函数的第7、8行,个人觉得有问题,应改为:s[i++] = "\0";
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯