任务是询问用户从哪个字符开始,直到他要在哪里创建另一个字符串。
int main()
{
char a[]="Working with stirng is fun";
printf("%s",a);
int s,e,j=0;
scanf("%d%d",&s,&e);
char b[e-s+2];
for(int i=s-1;i<=e-1;i++){
a[j]=b[i];
j++;
}
a[j]='\0';
printf("%s",b);
}
例如:如果用户输入4和7,则输出应为“ king”。
答案 0 :(得分:2)
您似乎正在尝试将a
的一部分复制到b
,但实际上是将其分配给a
的元素。
答案 1 :(得分:1)
您可以在循环中向后分配作业。您的a []变量是源字符串,b []是目标字符串,但是您的赋值是a[j]=b[i];
,它将b [i]赋给a [j]。顺便说一下,这是一个很好的例子,说明为什么变量名(如a和b)不好。如果您使用过像big_string和sub_string这样的变量名,您将不会遇到此问题。同样,当您有多个字符串时,诸如i和j之类的名称也会令人困惑-big_index和sub_index或其中一些这样的名称会更加清晰。
从样式上讲,您最好使i和j更紧密地平行,而不是在for行上声明和递增i,并且完全不同地声明和递增j:
int i, j;
for (i = s - 1, j = 0 ; i <= e - 1 ; i++, j++)
b[j] = a[i];
b[j] = '\0';
对我来说似乎更干净。
我认为更好的方法是使用单个变量来跟踪处理的字符数,并将其用作原始字符串的偏移量和子字符串的索引:
start--; // adjust user's input to start at 0 instead of 1
end--;
int dex;
for (dex = 0 ; dex <= end - start ; dex++)
sub_string[dex] = orig_string[start + dex];
sub_string[dex] = '\0';
(我还更改了更清晰的变量名,并将索引的更正从1更改为0而不是变量,而不是在循环内进行数学运算,这只会增加混乱)。
最后,最简单的方法是使用内置的strncpy()函数:
strncpy(sub_string, &orig_string[start], end - start + 1);
答案 2 :(得分:1)
只需更改线路
a[i] = b[j];
到b[j]=a[i];
和a[i] = '\0';
到b[j]='\0';