【问题标题】:C++ Characters [Sentences/Words]C++ 字符 [句子/单词]
【发布时间】:2014-11-14 20:33:11
【问题描述】:

我是 C++ 的初学者,我想了解更多关于字符的信息,但我遇到了一个问题。我试图制作一个复制句子并在空格 (' ') 之间添加新行 ('\n') 的程序,就像逐字分隔句子一样。

int main()
{
    char s[256], tmp[256];
    int m, n = 0, i;
    cout << "String: ";
    gets(s);
    for (i = 0; i <= strlen(s) - 1; i++)
    {
        if (s[i] == ' ')
        {
            m = i;
            if (n > strlen(s)) tmp[0] = 0;
            else
            {
                if (m >= strlen(s) - n + 1)
                    for (i = 0; i <= strlen(s) - n + 1; i++)
                        tmp[i] = s[n - 1 + i];
                else
                    for (i = 0; i < m; i++) tmp[i] = s[n - 1 + i];
            }
            strcat(tmp, "\n");
            n = i;
        }
    }
    cout << tmp;
    system("PAUSE");
}

【问题讨论】:

  • C++ 的功能远不止cout ...
  • 它做什么,它不做什么,等等等等
  • 首先 m,n 是子字符串的限制;我使用循环遍历所有字符,当找到空格时,表示单词的最后一个字符,之后我尝试逐字符复制该单词,并传递另一个
  • 使用 C++ 而不是 C 时,这很简单。stackoverflow.com/questions/2896600/…

标签: c++


【解决方案1】:

试试

更换

for(i=0;i<=strlen(s)-1;i++)
{
    if(s[i] == ' ')
    {
        m=i;
        if(n>strlen(s)) tmp[0] = 0;
        else 
        {
            if(m>=strlen(s)-n+1) 
                for(i=0;i<=strlen(s)-n+1;i++) tmp[i] = s[n-1+i];
            else 
                for(i=0;i<m;i++) tmp[i]=s[n-1+i];
        }
        strcat(tmp,"\n");
        n=i;
    }
}

for(i=0;i<=strlen(s)-1;i++)
{
    if(s[i] == ' ')
    {
        tmp[i] = '\n';
    }
    else
    {
        tmp[i] = s[i];
    }
}

【讨论】:

  • 不不不...我想逐字复制tmp中的字符串s
  • 我很困惑,您能否尝试更好地解释您希望您的 tmp 变量包含什么?我以为你想要带有新行而不是空格的原始字符串。
  • 嗯...我正在尝试像 strtok 函数那样分隔每个单词,但以另一种方式...并将它们放入一个新字符串中
猜你喜欢
  • 2020-05-30
  • 2013-06-22
  • 2016-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-12
  • 2013-03-09
  • 1970-01-01
相关资源
最近更新 更多