Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何按字母顺序排列句子中的每个单词?_C - Fatal编程技术网

C 如何按字母顺序排列句子中的每个单词?

C 如何按字母顺序排列句子中的每个单词?,c,C,我需要按字母顺序对句子中的每个单词进行排序,同时保持单词之间的独立性。我不允许使用strtok函数 示例输入:我非常感谢您的帮助 示例输出:I dlouw aelly aaceeipprt emos ehlp 我成功地按字母顺序对整个字符串进行了排序,这给了我一个输出:iaaacdeeehillmoopprrstuwy 我不确定是否应该将当前代码嵌套到一个循环中,该循环将在每次有空格时重新开始。或者,如果我需要将字符串读入二维数组并分别对每个单词进行排序 我也不确定比较每个字符的值或计算字符串中

我需要按字母顺序对句子中的每个单词进行排序,同时保持单词之间的独立性。我不允许使用strtok函数

示例输入:我非常感谢您的帮助

示例输出:I dlouw aelly aaceeipprt emos ehlp

我成功地按字母顺序对整个字符串进行了排序,这给了我一个输出:iaaacdeeehillmoopprrstuwy

我不确定是否应该将当前代码嵌套到一个循环中,该循环将在每次有空格时重新开始。或者,如果我需要将字符串读入二维数组并分别对每个单词进行排序

我也不确定比较每个字符的值或计算字符串中每个字母的出现次数是否更有意义。我有一个版本的每个给我的输出如上所示

提前谢谢

版本比较字符:

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

int main () {

    char str[100];

    printf("Please type a sentence :\n");
    scanf("%[^\n]s", str);

    printf("\nAlphabetical order:\n:);

    char temp;

    int i, j;
    int n = strlen(str);

    for (i = 0; i < n-1; i++) {
        for (j = i+1; j < n; j++) {
            if (str[i] > str[j]) {
                temp = str[i];
                str[i] = str[j];
                str[j] = temp1;
            }
        }
    }

    printf(str);

    return 0;
}

每个字符的版本计数出现次数:

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

int main () {

  char ch, input[100], output[100];
  int no[26] = {0}, n, c, t, x;

  printf("Please type a sentence:\n");
  scanf("%s", input);

  n = strlen(input);

  for (c = 0; c < n; c++)
  {
    ch = input[c] - 'a';
    no[ch]++;
  }

  t = 0;

  for (ch = 'a'; ch <= 'z'; ch++)
  {
    x = ch - 'a';

    for (c = 0; c < no[x]; c++)
    {
      output[t] = ch;
      t++
    }
  }
  output[t]  = '\0';

  printf("%s\n", output);

  return 0;

}
将对您提供的任何序列进行排序。例如

std::sort(str.begin(),str.begin()+5);
std::sort(str.begin()+6,str.end());
std::cout<<str;
应该输出Hello dlorw。如果希望以不同的方式处理大写字母,可以使用自定义比较运算符


现在你只需要重复这些单词。请不要随意混合C++和C.

标准库有足够的便利,不需要编写自己的循环。见:

关于使用单词和

对于排序等。哦,您可能还需要阅读迭代器。

使用fgets读取用户输入。在尝试使用输入之前验证成功

char buffer[1024];
if (fgets(buffer, sizeof buffer, stdin)) {
  const char *s = buffer;
搜索信件。使用isalpha

使用qsort排序并使用精度打印。现在s不需要以空字符结尾。避免使用sizeoftype并使用sizeof*指针,因为这样更容易正确编码、检查和维护

    int len = s - start;
    qsort(start, len, sizeof *start, fcmp);
    printf("%.*s", len, start);
  }
}
fcmp只是比较字符。标准库倾向于在将char值转换为无符号char后将其视为值


代码可能使用了返回a-b;。上面的代码更为贴切,从不涉及int类溢出,不像那些用CHARMAX>INTXMAX的罕见机器。< /P>是关于在线搜索解决方案的工作,还是解决问题?如果我添加了标题和STD::S,C++解决方案就为我编写好了。除了用换行符而不是空格分隔单词外,它似乎也起作用。不清楚你在问什么。你只是问缺少哪些标题吗?无意冒犯,但如果你不能解决申请时遇到的问题,那你申请的工作就错了。就这些主题提问是可以的。但是,在开头说这是求职申请不是一个好主意。雇主想看的是你如何解决问题,而不是互联网上的其他人如何解决问题。我意识到我应该能够自己解决这个问题。撇开工作不谈,我想了解如何解决这个问题。我在这里看不到相同的问题,所以任何答案都会对社区有益。@scottdavisxx提示:避免用多种语言指出问题。
    int len = s - start;
    qsort(start, len, sizeof *start, fcmp);
    printf("%.*s", len, start);
  }
}
int fcmp(const void *va, const void *vb) {
  const unsigned char *a = va;
  const unsigned char *b = vb;
  return (*a > *b) - (*a < *b);
}