我試圖將字符陣列轉換為字串陣列。表示單個字串到多個句子。
char str[1000]="This is first. Second sentence is possible. I'm third. The fourth one is here!";
上面的字串應轉換為句子陣列。
char **sentences={
"This is first.",
"Second sentence is possible.",
"I'm third.",
"The fourth one is here!"
};
我試過下面的代碼。
#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;
}
當我運行代碼時。
輸入:
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.
輸出:
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.
輸入:
This is first. Second sentence is possible. I'm third. The fourth one is here!
輸出:
0--->This is first.
1---> Second sentence is possible.
2---> I'm third.
3---> The fourth one is here!
當句子超過 5 時。第一句變成??V這樣。我在這里做錯了什么。
注意:我沒有string.h在這里使用。除了斯特倫。
uj5u.com熱心網友回復:
char **arr = (char **) malloc ((6) * sizeof (char));
如果您試圖為 6 個句子分配空間,那么這是錯誤的。您需要為元素的型別分配空間的arr它們char*,而不是char:
char **arr = malloc (sizeof *arr * 6);
這僅分配了 6 個指向字串的指標的空間。您現在需要為每個句子分配空間。就像是:
arr[i] = malloc(sizeof *arr * (size_of_sentece 1))
您還想為每個新句子重新分配,使其不具有 6 個句子的上限。
代碼中可能還有其他錯誤,我沒有檢查過。
最后使用標準庫并使用strtokwith".!?"作為分隔符。我知道您不能為此任務評分,但是學習使用標準庫是一件好事。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/381621.html
上一篇:將字串變成變數名
下一篇:將字串拆分為多個單詞
