我正在尝试使用 c 程序在偶数和奇数位置打印给定字符串的字符。我的程序工作正常,如果只有一个字符串,但它不适用于包含多个字符串的句子。以下代码只打印输入的第二个字符串,但它不会在偶数和奇数位置打印字符,因为它正在做对于第一个字符串。
int main()
{
char string[10], even[10], odd[10], i, j, k,count;
i = j = k = count = 0;
do
{
printf("Enter your input string:");
fgets(string, 10, stdin);
string[strlen(string) - 1] = '\0';
/* printing the input string */
printf("Given Input string:%s\n", string);
while (string[i] != '\0')
{
if (i % 2 == 0) {
odd[j++] = string[i];
}
else {
even[k++] = string[i];
}
i++;
}
/* terminating even and odd string with NULL */
odd[j] = even[k] = '\0';
/* print the characters at odd position and even positions */
printf(" %s %s", odd,even);
odd[0]=even[0]='\0';
count++;
}while(count<2);
return 0;
}
执行时,当我输入第一个字符串为“united”时,它打印出“uie”表示奇数位置,“ntd”表示偶数位置。然后我被提示输入我输入的第二个字符串作为“状态”但没有打印出来,除了输入的字符串和程序退出。它没有像第一个字符串那样输出。 请帮我指出我的错误,以便我的代码可以正常工作任意数量的字符串,而不仅仅是第一个字符串,即它应该输出用户输入的所有字符串的偶数和奇数位置的字符。
答案 0 :(得分:3)
您将自己局限于C语言的古老版本,该语法要求所有局部变量在任何可执行语句之前在块的顶部声明。
由于您的代码不使用count
/ do
循环之外的while
以外的变量,因此您应该在循环内移动它们的声明。这将确保变量在每次迭代开始时具有适当的初始值。
请注意以下几点:
odd[0]=even[0]='\0'
是不必要的答案 1 :(得分:-1)
使用namespace std;
struct str
{
char s[10000];
};
int main() {
int T;
cin >> T;
fflush(stdin);
str s1[10];
while (T--) {
cin >> s1[T].s;
fflush(stdin);
int j = 0;
while (j < strlen(s1[T].s)) {
if (j % 2 == 0)
cout << s1[T].s[j];
++j;
}
cout << " ";
int k = 0;
while (k < strlen(s1[T].s)) {
if (k % 2 == 1)
cout << s1[T].s[k];
++k;
}
cout << endl;
}
return 0;
}