我需要将字符串的所有偶数索引打印在一起,后跟一个空格,然后将字符串的所有奇数索引打印在一起。我可以输入多达 N 个字符串。每个新字符串将在输出中换行,并满足上述条件。
下面是我的代码,你能指出我哪里错了吗?
int main() {
int i;
int N;
char str[10000];
scanf("%d",&N);
while(N>0)
{
scanf("%s",str);
for(i=0; str[i] != '\0'; i++)
{
if((i%2)== 0)
{
printf("%c",str[i]);
}
else if((i%2)==1)
{
printf("%c",str[i]);
}
}
printf("\n");
N--;
}
return 0;
}
最佳答案
你只需要另一个像这样的循环
#include<stdio.h>
int main(int argc, char** argv) {
int i, N;
char str[10000];
scanf("%d", &N);
printf("%d\n", N);
while (N > 0) {
scanf("%s", str);
printf("%s\n", str);
// Even Indcies:
for (i = 0; str[i] != '\0'; i++) {
if (i % 2 == 0) {
printf("%c", str[i]);
}
//printf("%d", i);
}
printf(" ");
//Odd Indices
for (i = 1; str[i] != '\0'; i++) {
if (i % 2 == 1) {
printf("%c", str[i]);
}
//printf("%d", i);
}
printf("\n");
N--;
}
}
为了回应@StoryTeller 的评论,请考虑以下 C 代码
#include<stdio.h>
int main() {
int i, N;
char str[10000];
scanf("%d", &N);
while (N > 0) {
scanf("%s", str);
//printf("%s\n", str);
// Even Indcies:
for (i = 0; str[i] != '\0'; i+=2) {
printf("%c", str[i]);
//printf("%d", i);
}
printf(" ");
//Odd Indices
for (i = 1; str[i] != '\0'; i+= 2) {
printf("%c", str[i]);
//printf("%d", i);
}
printf("\n");
N--;
}
如果我在提示时输入以下参数:
2
reallylonginput
short
然后我实际上得到以下输出:
rallnipt elyognu
sotlnipt hr
正如我们所期望的,第一个工作得很好。但是,第二个包含无意义的字符,即第一个簇上的 lnipt 。要了解为什么会发生这种情况,我们必须仔细查看 str 变量。
当第一次调用scanf时,输入被写入str,str看起来像
| r | e | a | l | l | y | l | o | n | g | i | n | p | u | t | \0 | \0 | \0 | ...
所以循环对于第一个输入来说没有问题。但是当我们读入下一个输入时,str 看起来像
| s | h | o | r | t | \0 | l | o | n | g | i | n | p | u | t | \0 | \0 | ...
它仅覆盖所需的内容,而其他所有内容均保持不变。由于第一个循环仅扫描偶数索引,因此它会错过第一个\0 并继续运行。因此按 2 进行索引是行不通的。
关于c - C 中的字符串输入/输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42589697/