重新格式化输入的字符串,其中包含空格

时间:2014-10-21 03:05:10

标签: c++ arrays char

目前我正在研究一个问题,即将输入的字符串重新格式化为奇数字符,然后将字符重新格式化为没有换行符。恩。输入:良好的测试。输出:Go etodTs。出于某种原因,当我运行程序时,它只输出一个“G”。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>

using namespace std;

int main (int argc, char ** argv) {
    char sWordOdd[100] = {0};
    scanf("%s", sWordOdd);
    int iNum = strlen(sWordOdd);

    for (int i=0; i<=iNum && i%2==0; i++) {
        printf("%c",sWordOdd[i]);
    }
    for (int a=0; a<=iNum && a%2!=0; a++) {
        printf("%c",sWordOdd[a]);
    }
    printf("\n");

    return 0;
}

4 个答案:

答案 0 :(得分:0)

int main()
{
  string line;
  getline(cin, line);

  for (size_t start : {0,1})
    for (size_t ii = start; ii < line.size(); ii += 2)
      cout << line[ii];

  cout << endl;
}

上面的代码处理任意长行,是C ++ 11而不是C,并且有效。

答案 1 :(得分:0)

您的i<=iNum && i%2==0中断条件会提前终止您的循环。为了达到你想要的效果,在循环中放入一个if语句,如下所示:

for (int i = 0; i <= iNum; i++){
    if(i % 2 == 0)
        printf("%c",sWordOdd[i]);
}

至于你的第二个循环,我认为你的意思是a++而不是a--,因为否则你会尝试使用负索引来访问数组。我认为你的循环看起来像这样:

for (int a = 0; a <= iNum; a++){
    if(a % 2 != 0)
        printf("%c",sWordOdd[a]);
}

附注:注意我的代码中变量和运算符之间的间距。使用这样的空格可以使您的代码更容易阅读。

答案 2 :(得分:0)

如前所述,如果i&lt; = iNum&amp;&amp; i%2 == 0为真(对于第一个循环),这是i = 0的情况。第二个循环以i = 1结束。

由于你想要迭代所有字符,你必须将i%2 == 0部分移出for语句:

for (int i=0; i<=iNum; i++) {
    if (i%2==0)
    {
        printf("%c",sWordOdd[i]);
    }
}

第二个循环需要以相同的方式修改......

答案 3 :(得分:0)

要解决此问题,您必须使用可以在空白后查看内容的函数。此函数称为getline。但是使用getline,你必须使用字符串,所以在这个例子中我使用了字符串。然后我找到了.size()函数的大小,然后在for循环中使用了一个约束而不是问题中的两个约束。我也脱掉了char数组,并用如上所述的字符串替换它。其他一切都差不多了。使用这个答案让我不必使用cstring,也可以简化我的代码,简单易用。

&#13;
&#13;
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>

#define Set(a, s) memset(a, s, sizeof (a))
#define Rd(r) freopen(r, "r", stdin)
#define Wt(w) freopen(w, "w", stdout)

using namespace std;

int main (int argc, char ** argv)
{
	string sWordOdd;
	getline(cin, sWordOdd, '\n');
	int iNum = (int)sWordOdd.size();

	for (int i=0; i<iNum; i+=2){
		cout << sWordOdd[i];
	}
	for (int a=1; a<iNum; a+=2){
		cout << sWordOdd[a];
	}
	printf("\n");

	return 0;

}
&#13;
&#13;
&#13;

相关问题