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 模式值。

例如:&lt;xs:pattern value="^[A-Za-z0-9 _.,']*[A-Za-z0-9_.,']+[A-Za-z0-9 _.,']*$"/&gt;

谁能建议我如何限制字符串开头和结尾的空格(注意:我们需要接受字符串之间的空格)? .

【问题讨论】:

【参考方案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语言 一个字符串以空格开头 怎么去掉开头的空格的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver数据库中如何将每条数据开头的空格去掉?

JS问题,去掉字符串的前后空格

(去掉指定参数)去掉以空格开头的空格,和#号开头的#号(回炉练习)

str.join会去除空格吗

matlab 去掉字符串前后的空格

python几种去掉字符串中间空格的方法