C 在多个字符串的偶数和奇数位置打印字符
我试图使用c程序在奇偶位置打印给定字符串的字符。如果只有一个字符串,但对于包含多个字符串的句子,我的程序工作正常。以下代码仅打印输入的第二个字符串,但它不会像打印第一个字符串那样打印偶数和奇数位置的字符C 在多个字符串的偶数和奇数位置打印字符,c,C,我试图使用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:"); f
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;
}
intmain()
{
字符串[10],偶数[10],奇数[10],i,j,k,count;
i=j=k=count=0;
做
{
printf(“输入您的输入字符串:”);
fgets(字符串,10,标准输入);
字符串[strlen(string)-1]='\0';
/*打印输入字符串*/
printf(“给定输入字符串:%s\n”,字符串);
while(字符串[i]!='\0')
{
如果(i%2==0){
奇数[j++]=字符串[i];
}
否则{
偶数[k++]=string[i];
}
i++;
}
/*用NULL终止偶数和奇数字符串*/
奇数[j]=偶数[k]='\0';
/*在奇数和偶数位置打印字符*/
printf(“%s%s”,奇数、偶数);
奇数[0]=偶数[0]='\0';
计数++;
}而(count您将自己限制为C语法的一个古老版本,它要求在任何可执行语句之前在块的顶部声明所有局部变量
由于代码在do
/while
循环外未使用count
以外的变量,因此应将其声明移动到循环内。这将确保变量在每次迭代开始时具有适当的初始值
这里还有几点需要记住:
- 如果最终用户在不输入任何字符的情况下终止输入流(Windows上为Ctrl+Z,UNIX上为Ctrl+D),则代码将导致未定义的行为
- 当最终用户在输入少于十个字符后终止输入流时,代码将删除最后一个字符
奇数[0]=偶数[0]='\0'
是不必要的
您将自己限制在一个古老版本的C语法中,该语法要求在任何可执行语句之前,在块的顶部声明所有局部变量
由于代码在do
/while
循环外未使用count
以外的变量,因此应将其声明移动到循环内。这将确保变量在每次迭代开始时具有适当的初始值
这里还有几点需要记住:
- 如果最终用户在不输入任何字符的情况下终止输入流(Windows上为Ctrl+Z,UNIX上为Ctrl+D),则代码将导致未定义的行为
- 当最终用户在输入少于十个字符后终止输入流时,代码将删除最后一个字符
奇数[0]=偶数[0]='\0'
是不必要的
使用名称空间标准
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;
}
结构str
{
chars[10000];
};
int main(){
int T;
cin>>T;
fflush(stdin);
strs1[10];
而(T--){
cin>>s1[T].s;
fflush(stdin);
int j=0;
而(j
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;
}
结构str
{
chars[10000];
};
int main(){
int T;
cin>>T;
fflush(stdin);
strs1[10];
而(T--){
cin>>s1[T].s;
fflush(stdin);
int j=0;
而(j 你忘了重置局部变量了吗。i
、j
和k
没有被重置为0。是的,我现在意识到了我的错误。我已经修复了,现在正在工作。非常感谢!正确格式化/缩进你的代码。string[strlen(string)-1]='\0';
这就是一些人所说的cargo cult编程。你能详细解释一下这行的作用吗?你忘了重置局部变量。i
、j
和k
没有被重置为0。是的,我现在意识到了我的错误。我已经修复了,它正在工作。非常感谢你!格式化/缩进你的代码正确。string[strlen(string)-1]='\0';
这就是一些人所说的cargo cult编程。你能详细解释一下这行的功能吗?谢谢你的宝贵建议。谢谢你的宝贵建议。