在字符串中的每个字符之间添加“ - ”?

时间:2014-03-10 17:06:00

标签: c arrays string

怎么做?我愿意在某个字符串中的每个字符后添加字符-。 对于特定情况,假设我有一个大小为100的字符串,但只填充了3个字母(由用户输入 - 因此字符str[3]的值为NULL(\0))。 / p>

for(i = strlen(str) ; i >= 0 ; i--)
{
    str[i*2] = str[i];
}
for(i = 0 ; i < strlen(str) ; i++)
{
    if(i % 2 != 0)
    {
        str[i] = '-';
    }
}

但它没有用,帮助任何人?

4 个答案:

答案 0 :(得分:3)

您忘记在第一个循环中处理字符串的终止零。之后,原始终止零仍然存在:

A S D \0
A S S \0 D x \0

所以在第二个循环开始时strlen(str)仍然是3。<​​/ p>

当第二个循环到达第一个\0以将其替换为-时,由于for语句中的条件,循环终止了。

你最好在第一个循环中直接插入连字符。

for (i = strlen(str); i > 0; i--) {
    str[i*2] = str[i];
    str[i*2-1] = '-';
}

请注意,上面的循环只会降为1,因为无论如何都可以保留A

答案 1 :(得分:0)

您可以使用辅助字符串来存储更改的结果。

char str[100] = "ASD";
char changed[100*2 - 1] = "";
for(int i = 0, j = 0; i < strlen(str); i++, j+=2)
{
    changed[j] = str[i];
    if (i < strlen(str)-1)
    {
        changed[j + 1] = '-';
    }
}

for (int i = 0; i < strlen(changed); i++)
{
    printf("%c", changed[i]);
}

答案 2 :(得分:0)

#include <stdio.h>
#include <string.h>

int main()
{
   char str[100];
   int len = 0;
   int i = 0;
   strcpy(str, "abcd");

   len = strlen(str);
   // len = 4

   // Expected output: "a-b-c-d"
   // str[7] = '\0';
   // str[6] = 'd';
   for(i = len-1; i >= 0 ; i--)
   {
      str[i*2+1] = '-';
      str[i*2] = str[i];
   }
   str[len*2-1] = '\0';

   printf("%s\n", str);
}

答案 3 :(得分:0)

仅使用first for循环并对for循环进行此更改

for(i = strlen(str)-1 ; i > 0 ; i--)
{
   str[i*2] = str[i];
   str[i*2-1] = '-';
}