在C中从rigth写入字符串

时间:2015-06-19 16:25:21

标签: c string

您好我正在尝试读取输入并将每个字符添加到字符串的左侧,例如:

我输入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;它被删除了,只留下了最后两个输入......

3 个答案:

答案 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