【问题标题】:String triangle with space as delimiter C language以空格为分隔符的字符串三角形C语言
【发布时间】:2026-02-10 03:20:04
【问题描述】:

这是一个独特的三角形,与所有其他三角形不同,它打印由空格分隔的单词。我正在寻找的答案在我已经检查过的任何其他问题中都不存在。

输出应该是这样的

这个
这是
这是
这是最好的
这是最好的方式
这是最好的方式
这是最好的消费方式
br> 这是消磨时间的最佳方式

到目前为止我的代码是

#include <stdio.h>

int main()
{

    char msg[]="this is the best way to spend time for reedaf";
    int inn=1, out, i=0, max;
    max=(sizeof(msg)/sizeof(int))+1;
    char *output;
    char *spc=" ";
      output=strtok(msg,spc);
    for(out=1;out<max;out++){

        for(i=0;i<out && output != NULL ;i++){

      printf("%s ", output);
      output=strtok(NULL,spc);

          }

    printf("\n");

    }
    return 0;
}

这会产生这个输出




花时间参加 reedaf 的最佳方式

所以请帮助我,我无法安心

我需要以数组中的起始词开始每一行。那么下一行应该从数组中的起始单词开始,然后是下一个单词。那么下一行应该再次从数组中的起始单词开始,然后是下一个单词,然后是下一个单词。依此类推。

请尽量不要使用中断;或 memcpy

【问题讨论】:

  • 您是否会正确地格式化您的代码并注意解释实际问题是什么?

标签: c string space delimiter


【解决方案1】:

OP 对strtok() 的使用不会根据需要恢复字符串,而只是沿字符串前进。

Follows 是候选简化。

void printTri(char *s) {
  for (size_t i = 0; s[i]; i++) {
    if (s[i] == ' ') {
      s[i] = '\0';
      puts(s);
      s[i] = ' ';
    }
  }
  puts(s);
}

int main(void) {
  char msg[] = "this is the best way to spend time for reedaf";
  printTri(msg);
  return 0;
}

【讨论】:

  • 谢谢您,先生,只有我看到您必须删除 size_t 仅此而已,并且代码可以完美运行。
  • 哦,是的,你也必须声明 i 变量
  • 您必须在第一个 for 循环之前删除 size_t 并声明“i”变量,并且代码可以正常工作,谢谢
  • @deeraf C99 及更高版本允许在上述for 循环中声明变量。您可能使用的编译器不是最新的=to=date。 size_t&lt;stddef.h&gt; 中,IMO 比 int 更适合使用,特别是对于可移植例程以及当 i 可能变得时。
【解决方案2】:

我不太确定您在代码中做了什么,但是您要求的输出可以通过此代码获得。

#include<stdio.h>
#include<string.h>

int main()
{
char str[]="this is the best way to spend time for reedaf",ch=' ',c='$';
int n=0,x,i,j;
x=strlen(str);
for(i=0;i<x;i++)
{
    if(str[i]==ch)
        n++;
}
for(i=0;i<n+1;i++)
{
    for(j=0;j<x;j++)
    {
        if(str[j]==ch)
        {
            str[j]=c;
            break;
        }
        else
        {
            if(str[j]==c)
                printf("%c",ch);
            else
                printf("%c",str[j]);
        }
    }
    printf("\n");
}
return 0;
}

【讨论】:

  • 你使用了break,出于某种原因,OP 不喜欢这样。
  • 谢谢,但你能不使用 break 吗? ?拜托拜托
  • @deeraf 如果你真的想要它没有 break 语句,然后使用空字符,而不是美元符号。希望这可能有效。
最近更新 更多