您好我正在尝试读取输入并将每个字符添加到字符串的左侧,例如:
我输入1,输出应为:
1
然后我要添加数字2:输出应为:
21
然后我要添加数字3:输出应为:
321
然后我要添加数字4:输出应为:
4321
等...
到目前为止,我已经管理了字符串长度= 0和1:
的情况if( stringLength == 1 ){
string[ stringLength++ ] = string[ 0 ];
string[ pStringLength - 1 ] = input;
}
else if( stringLength == 0 )
string[ stringLength++] = input;
我的问题是stringLength> 2:
if( stringLength >= 2 ){
for(indexx = 1; indexx < stringLength; indexx++){
string[ stringLength++ ] = string[ stringLength - indexx ];
}
string[ 0 ] = input;
}
上面的代码给我分段错误,在此先感谢您的帮助! EDIT !!:
if( stringLength >= 2 ){
for(indexx = 1; indexx < stringLength; indexx++){
string[ stringLength ] = string[ stringLength - indexx ];
}
stringLength++;
string[ 0 ] = input;
}
现在输出始终限制为2:
如果我有:
21
我尝试添加&#39; 3&#39;:
32
&#39; 1&#39;它被删除了,只留下了最后两个输入......
答案 0 :(得分:3)
如果你在循环中增加stringLength,那么循环将永远不会结束,因为循环条件正在检查stringLength的值。
答案 1 :(得分:3)
string[ stringLength ] = string[ stringLength - indexx ];
以上陈述不断覆盖相同的索引。说明输出限制为2位的原因。
提示:你需要从头开始将元素向右推一个位置。所以你最后会覆盖字符串[0]。
假设数组是{1,2,3,4}并且我想添加5,所以输出应该是{5,1,2,3,4}
然后将每个元素从末尾向右移动一个位置将生成数组{1,1,2,3,4},然后您可以执行数组[0] = 5;
转移可以这种方式完成
for(i=arr.length-1;i>=1;i--)
{
arr[i]=arr[i-1];
}
希望它有所帮助。
答案 2 :(得分:1)
看看下面的代码。
#include <stdio.h>
int main()
{
char a[10] = "";
int i = sizeof(a)-2;
while(i>=0)
{
scanf(" %c",&a[i]);
printf("%s\n",a+i);
i--;
}
return 0;
}
我保留了数组大小10
,由你决定数组大小。
输出:
1
1
2
21
3
321
4
4321
5
54321
6
654321
7
7654321
8
87654321
9
987654321