我需要閱讀文本並查找單詞之間是否有多個空格。將單詞間的多個空格更改爲一個
如果有更改爲1。
例如,如果我有一個文本:
My name is Lukas
計劃應將其更改爲:
My name is Lukas
任何想法?
我需要閱讀文本並查找單詞之間是否有多個空格。將單詞間的多個空格更改爲一個
如果有更改爲1。
例如,如果我有一個文本:
My name is Lukas
計劃應將其更改爲:
My name is Lukas
任何想法?
j = 0;
for(i=0; myStr[i] != '\0'; i++) {
if(myStr[i] == ' ' && myStr[i+1] == ' ')
continue;
newStr[j] = myStr[i];
j++;
}
而且不要忘了添加'\0'
(表示字符串結束)到newStr
從您之前的查詢中,我修改了邏輯以符合您的要求。希望這可以幫助。
FILE *in;
char ch,str[100],cw;
int j,i = 0;
int isSpace = 0;
in=fopen("duom.txt","r");
if(in){
while(!feof(in)){
ch=getc(in);
if(isSpace)
isSpace = (isSpace & (ch == ' '));
if(!isSpace) {
str[i] = ch;
i++;
}
if(ch == ' ')
isSpace = 1;
}
for(j=0;j<i;j++){
printf("%c",str[j]);
}
你假設OP正在執行文本的實時輸入,但我認爲這不是一個有效的(或有用的)假設。 – mah 2013-02-16 16:55:51
@mah我已經提到同一個用戶的上一個問題http://stackoverflow.com/questions/14911803/how-to-read-text-from-textfile-and-store-every-character-in-an-數組/ 14911898#14911898。我有反正更新了整個程序 – Ganesh 2013-02-16 17:00:37
它幫助,謝謝,但你能解釋這一行:isSpace =(isSpace&(ch =='')); ? – 2013-02-16 17:28:15
isspace
from <ctype.h>
在這裏可以使用。這裏是一個可能的實現:
void delete_multiple_spaces(char *dst, const char *src)
{
int previous = 0;
int c;
while ((c = *src++) != '\0')
{
if (isspace(c) && !previous)
{
previous = 1;
}
else
{
if (previous)
{
*dst++ = ' ';
previous = 0;
}
*dst++ = c;
}
}
*dst = '\0';
}
while (*str) {
if (*str != ' ' || str[1] != ' ') *newstr++ = *str;
str++;
}
*newstr = 0;
請參閱[以前的答案](http://stackoverflow.com/questions/14702877/recursive-form-of-changing-multiple-spaces-to-one-space/14704571#14704571)更多版本 – 2013-02-16 17:22:10
char *(strdupcompact) (const char *c)
{
int i; int p;
for (i = 0, p = 0; c[i]; i++, p++)
{
if (c[i] == ' ') while (c[i+1] == ' ') i++;
}
char *newstr = malloc(p + 1);
for (i = 0, p = 0; c[i]; i++, p++)
{
newstr[p] = c[i];
if (c[i] == ' ') while (c[i+1] == ' ') i++;
}
newstr[p] = 0;
return newstr;
}
末使一個你的字符串的mableced副本。
檢出['isspace'](http://en.cppreference.com/w/c/string/byte/isspace)並理解循環可能是一個好的開始。 – 2013-02-16 16:44:31
你有什麼想法嗎?我們可以聽取他們的意見並對他們發表評論! – 2013-02-16 16:46:28
感謝你們真的幫助過我,對我的粗俗抱歉:/ – 2013-02-16 16:58:14