我解決下的問題,在那裏我找到ASTRING重複的話就像如何檢查C中字符串中的重複單詞?
char a[]="This is it This";
在上面的字符串「這」出現兩次,所以我想指望它作爲一個。
任何人都可以建議如何實現這一目標嗎?
我解決下的問題,在那裏我找到ASTRING重複的話就像如何檢查C中字符串中的重複單詞?
char a[]="This is it This";
在上面的字符串「這」出現兩次,所以我想指望它作爲一個。
任何人都可以建議如何實現這一目標嗎?
這是一個程序,可以完成你所要求的功能。它被硬編碼爲最多99個字符的4個字。這可以很容易地改變;我只是適合你的輸入。我也用strcmp
和strcpy
。這兩個函數都可以自己實現(稱它們爲mystrcpy和mystrcmp並嵌入它們)。我不會爲你重寫字符串函數。我確實展示瞭如何根據其他答案來避免strtok。我查看了他們,他們並不複雜,但他們沒有添加任何東西到程序中,我不想重新發明輪子。最後,我只是在notInArray
函數中使用了一個簡單的線性搜索。對於大型數據集來說,這並不高效(您可能會使用某種類型的樹或散列)。
這是gcc版本下編譯4.3.4
#include <stdio.h>
#include <string.h>
int notInArray(char arr[][100], char *word, int size);
int main() {
char a[] = "This is a This";
char *ptr;
char strarr[4][100];
char word[100];
int pos = 0;
int count = 0;
int i;
memset(&strarr,0,sizeof(strarr));
printf("%s\n\n",a);
ptr = a;
while (*ptr) {
sscanf(ptr, "%s ", word);
if (notInArray(strarr,word,4)) {
strcpy(strarr[pos++],word);
printf("%s\n", word);
}
while (!isspace(*ptr++) && *ptr) {}
}
for (i=0; i<4; i++) {
if (*strarr[i]) {
printf("strarr[%d]=%s\n",i, strarr[i]);
count++;
}
}
printf("\nUnique wordcount = %d\n", count);
return(0);
}
int notInArray(char arr[][100], char *word, int size) {
int i;
for (i=0; i<size; i++) {
if (*arr[i] && !strcmp(arr[i],word)) {
return(0);
}
}
return(1);
}
輸出看起來像:
~>a
This is a This
This
is
a
strarr[0]=This
strarr[1]=is
strarr[2]=a
Unique wordcount = 3
享受。
感謝您的努力,想知道寫上面的代碼花了多少錢? – 2011-03-09 10:07:14
這個程序並不難寫。我不得不查找sscanf,因爲我沒有使用它,它不是寫這種類型的解析代碼的更「正常」的方式。 strtok函數通常是更好的選擇。 – jmq 2011-03-09 10:17:13
無論如何感謝@jmquigley爲你的幫助,並試圖讓它更容易一點... – 2011-03-09 10:35:25
我可能會一次讀一個單詞(例如,使用sscanf [編輯:剛剛看到您的評論 - 它仍然很容易沒有字符串函數 - 只需掃描以找到空間/非空間字符來查找單詞 - 令人討厭但不是主要的),並把它們放入一個數組(或者,如果你有比上面顯示的多得多的二叉搜索樹)。
如果您想要計算每個單詞出現的次數,您可以在每個節點中都有一個int(或其他)。如果您只想知道輸入中的獨特單詞,則不需要計數,只需要一組單詞。
這功課嗎?看看strtok(用於分解字符串)和strcmp來檢查strtok中每個標記是否存在重複。您也可以一次移動一個字節的字符串,使用strcmp和指針操作來查找搜索字符串。有很多方法來剝皮這隻貓。 – jmq 2011-03-09 07:02:11
不準確的家庭作業.. @Jmquigley,我不必使用標準的字符串函數做 – 2011-03-09 07:04:17
「count as one」是什麼意思?你想第二個被刪除?指向第二個事件的指針?需要更多的信息。 – jmq 2011-03-09 07:06:38