首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符串拆分为C中的字符串数组

将字符串拆分为C中的字符串数组
EN

Stack Overflow用户
提问于 2021-12-15 09:36:35
回答 1查看 57关注 0票数 0

我试图将字符数组转换为字符串数组。表示单个字符串到多个句子。

代码语言:javascript
复制
char str[1000]="This is first. Second sentence is possible. I'm third. The fourth one is here!";

以上字符串应转换为句子数组。

代码语言:javascript
复制
char **sentences={
 "This is first.",
 "Second sentence is possible.",
 "I'm third.",
 "The fourth one is here!"
 };

我试着按照下面的代码。

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int
char_comp (char a, char b)
{
  return a == b;
}

int
is_special (char str)
{
  return char_comp (str, '?') || char_comp (str, '.') || char_comp (str, '!');
}

void
str_to_arr (char a[], char **b)
{
  int i = 0, j = 0, length = strlen (a), sentance_length =6, k = 0; //here added sentance_length 8 as static
  for (i = 0; i < sentance_length; i++)
    {
      b[i] = (char *) malloc (length * sizeof (char));
      int n = 0;
      for (j = k; j < length; j++)
    {
      b[i][n] = a[j];

      n++;
      k++;
      if (is_special (a[j]))    //if !,?,. found then move to next sentence.
        {
          b[i][n] = '\0';
          break;
        }

    }
    }
}

int
main ()
{
  char finalstr[1000]; 
    fgets(finalstr, 1000, stdin);
  char **arr = (char **) malloc ((6) * sizeof (char));
  str_to_arr (finalstr, arr);

  for (int i = 0; i < strlen (finalstr); i++)
    {
      printf ("%i--->%s\n",i, arr[i]);
    }
  return 0;
}

当我运行密码的时候。

投入:

代码语言:javascript
复制
Die schnelle Fourier-Transformation ist ein Algorithmus zur effizienten Berechnung der diskreten Fourier-Transformation.Mit ihr kann ein zeitdiskretes Signal in se ine Frequenzanteile zerlegt und dadurch analysiert werden.  Analog gibt es fuer die diskrete inverse Fourier-Transformation die inverse schnelle Fourier-Transformati on (IFFT). Es kommen bei der IFFT die gleichen Algorithmen, aber mit konjugierten Koeffizienten zur Anwendung. Die FFT gehoert zu den "Divide-and-conquer"-Verfahre n, sodass zuvor berechnete Zwischenergebnisse wiederverwendet werden koennen. Dadu rch koennen arithmetische Rechenoperationen eingespart werden.

产出:

代码语言:javascript
复制
0--->��V
1--->Mit ihr kann ein zeitdiskretes Signal in se ine Frequenzanteile zerlegt und dadurch analysiert werden.
2--->  Analog gibt es fuer die diskrete inverse Fourier-Transformation die inverse schnelle Fourier-Transformati on (IFFT).
3---> Es kommen bei der IFFT die gleichen Algorithmen, aber mit konjugierten Koeffizienten zur Anwendung.
4---> Die FFT gehoert zu den "Divide-and-conquer"-Verfahre n, sodass zuvor berechnete Zwischenergebnisse wiederverwendet werden koennen.
5---> Dadu rch koennen arithmetische Rechenoperationen eingespart werden.

投入:

代码语言:javascript
复制
This is first. Second sentence is possible. I'm third. The fourth one is here!

产出:

代码语言:javascript
复制
0--->This is first.
1---> Second sentence is possible.
2---> I'm third.
3---> The fourth one is here!

当句子超过5,第一句变成��V。我在这里做错了什么。

注意:我这里不使用string.h 。除了斯特伦,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-15 09:48:30

代码语言:javascript
复制
char **arr = (char **) malloc ((6) * sizeof (char));

如果你试图为6个句子分配空间,那就错了。您需要为arr的类型分配空间,这些元素是char*,而不是char

代码语言:javascript
复制
char **arr = malloc (sizeof *arr * 6);

这只为字符串分配6个指针的空间。现在,您需要为每个句子分配空间。类似于:

代码语言:javascript
复制
arr[i] = malloc(sizeof *arr * (size_of_sentece + 1))

此外,你想重新分配每一个新的句子,以没有这个上限的6句。

代码中可能有其他错误,我还没有检查。

最后使用标准库,并使用strtok".!?"作为分隔符。我知道你不能为这个任务打分,但是学习使用标准库是件好事。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70361350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档