怎么做?我愿意在某个字符串中的每个字符后添加字符-
。
对于特定情况,假设我有一个大小为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] = '-';
}
}
但它没有用,帮助任何人?
答案 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] = '-';
}