编辑字符串并用C单独打印每个单词的程序

时间:2012-10-04 03:07:56

标签: c

当我运行我的程序时,我不断收到错误分段错误(核心转储)。

#include<stdio.h>
#include<stdlib.h>
    int nextword(char *str);

    int main(void)
    {
      char str[] = "Hello! Today is a beautiful day!!\t\n";
      int i = nextword(str);
       while(i != -1)
         {
          printf("%s\n",&(str[i]));
          i = nextword(NULL);
          }
      return 0;
      }

    int nextword(char *str)
    {
      // create two static variables - these stay around across calls
      static char *s;
      static int nextindex;
      int thisindex;
      // reset the static variables
      if (str != NULL)
        {
          s = str;
          thisindex = 0;
          // TODO:  advance this index past any leading spaces
          while (s[thisindex]=='\n' || s[thisindex]=='\t' || s[thisindex]==' ' )
        thisindex++;

        }
      else
        {
          // set the return value to be the nextindex
          thisindex = nextindex;
        }
      // if we aren't done with the string...
      if (thisindex != -1)
        {
          nextindex = thisindex;
          // TODO: two things
          // 1: place a '\0' after the current word
          // 2: advance nextindex to the beginning
          // of the next word
          while (s[nextindex] != ' ' && s[nextindex] != '\0')
        nextindex++;

          str[nextindex] = '\0';
          nextindex++;
        }
      return thisindex;
    }

程序的目标是将字符串str []中的每个单词打印到新行的控制台上。我是一个初学程序员,这是一个作业,所以我必须使用这种格式(不允许使用字符串库)。我只是想知道我哪里出错了以及如何解决它。

2 个答案:

答案 0 :(得分:1)

嗯,我之前在另一个问题中看过这个节目...... Function that reads each word in a string and prints each word on different line with C

你的循环中有错误:

while (s[nextindex] != ' ' || s[nextindex] != '\0')

使用&&,而不是||。该循环将永远不会终止,因为这两个条件中的至少一个将始终为真。

然后你必须修复你的另一个问题(未能检测到字符串结尾)。这样就可以了:

if( str[nextindex] != 0 ) {
    str[nextindex] = '\0';
    nextindex++;
} else {
    nextindex = -1;
}

答案 1 :(得分:0)

我无法遵循您的代码逻辑,但首先,

i = nextword(NULL);
在你的主循环中的

将无法实现。你的意思是迭代你删除了一个单词的字符串的其余部分吗?