C 如何删除字符串句子中的空格
我试图写一个代码来删除所有的前导、尾随和中间的句子空格,但是在单词之间只保留一个空格 例如,如果输入是C 如何删除字符串句子中的空格,c,C,我试图写一个代码来删除所有的前导、尾随和中间的句子空格,但是在单词之间只保留一个空格 例如,如果输入是 " This is my string " 输出应该是 "This is my string" 到目前为止,我已经得出了以下结论: #include <stdio.h> void cascade(char str[], int i); main() { char str[100] = " This is my string
" This is my string "
输出应该是
"This is my string"
到目前为止,我已经得出了以下结论:
#include <stdio.h>
void cascade(char str[], int i);
main()
{
char str[100] = " This is my string ";
int i = 0;
while (str[i] != '\0') {
if (str[i] == ' ' && str[i + 1] == ' ')
cascade(str, i);
i++;
}
printf("%s\n", str);
}
void cascade(char str[], int i)
{
while(str[i] != '\0') {
str[i] = str[i + 1];
i++;
}
str[i + 1] = '\0';
}
#包括
void级联(char-str[],int-i);
main()
{
char str[100]=“这是我的字符串”;
int i=0;
while(str[i]!='\0'){
如果(str[i]=''&&str[i+1]='')
级联(str,i);
i++;
}
printf(“%s\n”,str);
}
无效级联(字符str[],int i)
{
while(str[i]!='\0'){
str[i]=str[i+1];
i++;
}
str[i+1]='\0';
}
如果有人能提出一些想法,我将不胜感激。谢谢。使用两个指针。第一个点指向下一个要读取的字符,第二个点指向要写入的位置 如果您在一行中读取两个空格,请不要提前写入指针
另一种方法,您可能需要考虑使用“<代码>”“<代码>”作为定界符。
使用两个指针。第一个点指向下一个要读取的字符,第二个点指向要写入的位置
如果您在一行中读取两个空格,请不要提前写入指针另一种方法,您可能需要考虑使用“<代码>”“< /C>”作为定界符。
< P>可以有两个数组和两个计数器。每次迭代都会增加第一个计数器,但仅当角色不是空格时才增加第二个计数器。一张这样的桌子Char In Pos Out Pos
' ' 0 0
' ' 1 0
' ' 2 0
' ' 3 0
‘T’40
“h”5 1
“我”6 2
's'73
' ' 8 4
' ' 9 5
' ' 10 5
' ' 11 5
“我”12 5
's'13 6
' ' 14 7
“m”15 8
“y”16 9
' ' 17 10
' ' 18 11
' ' 19 11
' ' 20 11
' ' 21 11
's'22 11
t'2312
r'2413
“我”25 14
n'26 15
‘g’27 16
' ' 28 17
' ' 29 18
' ' 30 18
' ' 31 18
您可以有两个数组和两个计数器。每次迭代都会增加第一个计数器,但仅当角色不是空格时才增加第二个计数器。一张这样的桌子
Char In Pos Out Pos
' ' 0 0
' ' 1 0
' ' 2 0
' ' 3 0
‘T’40
“h”5 1
“我”6 2
's'73
' ' 8 4
' ' 9 5
' ' 10 5
' ' 11 5
“我”12 5
's'13 6
' ' 14 7
“m”15 8
“y”16 9
' ' 17 10
' ' 18 11
' ' 19 11
' ' 20 11
' ' 21 11
's'22 11
t'2312
r'2413
“我”25 14
n'26 15
‘g’27 16
' ' 28 17
' ' 29 18
' ' 30 18
' ' 31 18
您可以在第一个实例中使用字符串标记器,并使用空格(“”)作为分隔符。为此,在C中使用strtok,然后解析strtok函数的输出,对于每个元素,如果它包含更多的空格字符,则消除它们。还可以将每个更正的元素放入另一个数组中。
然后,您所要做的就是解析新数组,并在每个元素后添加一个空格。如果您喜欢这个想法,我可以为您提供一个代码草案 您可以在第一个实例中使用字符串标记器,并使用空白(“”)作为分隔符。为此,在C中使用strtok,然后解析strtok函数的输出,对于每个元素,如果它包含更多的空格字符,则消除它们。还可以将每个更正的元素放入另一个数组中。
#include <stdio.h>
#include <string.h>
char* trim(char str[]){
char *p=str;
char *token;
if(str == NULL) return NULL;
if(*str == '\0') return str;
token=strtok(str, " \t");
if(token == NULL){
*str = '\0';
return str;
}
while(NULL!=token){
int len;
len = strlen(token);
if(p != token){
memmove(p, token, len);
}
p += len;
*p++ =' ';
token = strtok(NULL, " \t");
}
p[-1]='\0';
return str;
}
int main(){
char str[100] = " This is my string ";
printf("\"%s\"\n", trim(str));
return 0;
}
然后,您所要做的就是解析新数组,并在每个元素后添加一个空格。如果您喜欢这个想法,我可以为您提供一个代码草案 #包括
#include <stdio.h>
#include <string.h>
char* trim(char str[]){
char *p=str;
char *token;
if(str == NULL) return NULL;
if(*str == '\0') return str;
token=strtok(str, " \t");
if(token == NULL){
*str = '\0';
return str;
}
while(NULL!=token){
int len;
len = strlen(token);
if(p != token){
memmove(p, token, len);
}
p += len;
*p++ =' ';
token = strtok(NULL, " \t");
}
p[-1]='\0';
return str;
}
int main(){
char str[100] = " This is my string ";
printf("\"%s\"\n", trim(str));
return 0;
}
#包括
字符*修剪(字符str[]){
char*p=str;
字符*令牌;
if(str==NULL)返回NULL;
如果(*str=='\0'),则返回str;
令牌=strtok(str,“\t”);
if(标记==NULL){
*str='\0';
返回str;
}
while(NULL!=令牌){
内伦;
len=strlen(令牌);
if(p!=令牌){
memmove(p,token,len);
}
p+=len;
*p++='';
令牌=strtok(空,“\t”);
}
p[-1]='\0';
返回str;
}
int main(){
char str[100]=“这是我的字符串”;
printf(“\%s\”\n”,trim(str));
返回0;
}
#包括
#包括
字符*修剪(字符str[]){
char*p=str;
字符*令牌;
if(str==NULL)返回NULL;
如果(*str=='\0'),则返回str;
令牌=strtok(str,“\t”);
if(标记==NULL){
*str='\0';
返回str;
}
while(NULL!=令牌){
内伦;
len=strlen(令牌);
if(p!=令牌){
memmove(p,token,len);
}
p+=len;
*p++='';
令牌=strtok(空,“\t”);
}
p[-1]='\0';
返回str;
}
int main(){
char str[100]=“这是我的字符串”;
printf(“\%s\”\n”,trim(str));
返回0;
}
#包括
#包括
#包括
字符**拆分(常量字符*str,常量字符*分隔符,大小*len){
字符*text,*p,*first,**数组;
INTC;
字符**ret;
*len=0;
text=strdup(str);//strdup不标准
if(text==NULL)返回NULL;
for(c=0,p=text;NULL!=(p=strtok(p,分隔符));p=NULL,c++)//计数项
如果(c==0)first=p;//第一个令牌top
ret=(char**)malloc(sizeof(char*)*c+1);//+1表示空
if(ret==NULL){
免费(文本);
返回NULL;
}
//记忆