c语言 一个字符串以空格开头 怎么去掉开头的空格
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言 一个字符串以空格开头 怎么去掉开头的空格相关的知识,希望对你有一定的参考价值。
c语言 一个字符串以空格开头 怎么去掉开头的空格 字符串长度不确定
指针向后移动一个字节即可。如果是动态分配的内存
可使用memmove
char str[] = " abc";
memmove(str, str+1,strlen(str)); 参考技术A #include <stdio.h>
#include <string.h>
#include <stdlib.h>
char* skipSpaceAtTheHead(char *str)
char *s=str,*p=str;
if(str==NULL) return NULL;
while(*s!='\0'&&*s==' ') s++;/*跳过开头的空格*/
while(*s!='\0') *p++=*s++;/*复制剩余字符到新位置,p总是前于s刚才跳过空格个数那么多位置*/
*p='\0';/*字串结束标识符*/
return str;
int main()
char a[30];
printf("input a string:\n");
gets(a);
skipSpaceAtTheHead(a);
puts(a);
system("pause");
return 0;
参考技术B 指针
#include<stdio.h>
int main()
char *p=" abcd";
printf("%s\n",p);
while(*p==32)
p++;
printf("%s\n",p);
return 0;
数组
#include<stdio.h>
int main()
char a[100]=" abcd";
int i=0;
int j=0;
printf("%s\n",a);
while(a[i]==32)
i++;
printf("%s\n",a+i);//如果只是显示,到这就可以了
if(i>0)
for(j=0;a[j+i]!='\0';j++)
a[j]=a[j+i];
a[j]='\0';
printf("%s\n",a);
return 0;
参考技术C 如果你定义的是数组 都向左移一个
指针向后移动一个字节
禁止字符串以空格开头或结尾的 XSD?
【中文标题】禁止字符串以空格开头或结尾的 XSD?【英文标题】:XSD that prohibits strings from starting or ending with whitespace? 【发布时间】:2021-12-29 13:40:37 【问题描述】:我们在加载 XML 文件之前使用 XSD 模式验证。因此,在使用 XSD 模式验证加载 XML 时,它接受字符串开头和结尾的空格。我们只需要限制字符串开头和结尾的空格。但是在字符串中间我们需要接受字符串之间的空格。
例如:SOMEXMLFIELD ="STACK OVER FLOW"
.
为此,我们为架构验证配置了以下 XSD 模式值。
例如:<xs:pattern value="^[A-Za-z0-9 _.,']*[A-Za-z0-9_.,']+[A-Za-z0-9 _.,']*$"/>
谁能建议我如何限制字符串开头和结尾的空格(注意:我们需要接受字符串之间的空格)? .
【问题讨论】:
【参考方案1】:这个 XSD,
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="e">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[^\s]?"/>
<xs:pattern value="[^\s].*[^\s]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:schema>
将允许e
具有内部空格,但不能以空格开头或结尾。
请注意,XSD 正则表达式模式是隐式锚定的,因此不要使用 ^
和 $
进行锚定。
Reference:
注意:不同于一些流行的正则表达式语言(包括 那些由 Perl 和标准 Unix 实用程序定义的),常规 此处定义的表达式语言隐式锚定所有正则 头部和尾部的表达式,作为正则的最常见用法 ·pattern· 中的表达式是匹配整个文字。
更新: @Thefourthbird had a good point 应该允许 1 和 2 个不带前导/尾随空格的字符串。我也扔了空字符串。
【讨论】:
【参考方案2】:如果您还想允许匹配 1 和 2 个字符,您可以在不允许空格的情况下开始匹配,并且可以选择匹配任何字符,包括中间的空格,然后再次匹配没有空格的字符。
[A-Za-z0-9_.,']([A-Za-z0-9 _.,']*[A-Za-z0-9_.,'])?
Regex demo
简而言之:
[\w.,']([\w .,']*[\w.,'])?
【讨论】:
关于允许 1 或 2 个字符的好点。我更新了可能会回答并归功于您的观察。 请注意,XSD 正则表达式模式会自动在前端和后端锚定,因此您不需要前导^
和尾随 $
。
@kjhughes 感谢您的评论,我不知道。
您好,感谢您的建议。
这适用于我的代码。以上是关于c语言 一个字符串以空格开头 怎么去掉开头的空格的主要内容,如果未能解决你的问题,请参考以下文章