C语言如何分割字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言如何分割字符串相关的知识,希望对你有一定的参考价值。
问题:需要设计c语言程序来问你的姓名和学号,这时候用char和scanf就好,可是老师说万一问姓名结果你输入的是数字这也要检测出来,于是想到分割字符串来检测是否含有除了字母以外的东西,这种思路对吗?表示刚学C语言,老师就这样坑我们。。。大神求救!!!
可以写一个分割函数,用于分割指令,比如cat a.c最后会被分割成cat和a.c两个字符串、mv a.c b.c最后会被分割成mv和a.c和b.c三个字符串。
参考代码如下:
#include <stdio.h>#include<string.h>
#define MAX_LEN 128
void main()
int i,length,ct=0,start = -1;
char inputBuffer[MAX_LEN],*args[MAX_LEN];
strcpy(inputBuffer,"mv a.c b.c");
length=strlen(inputBuffer);
for (i = 0; i <= length; i++)
switch (inputBuffer[i])
case \' \':
case \'\\t\' : /* argument separators */
if(start != -1)
args[ct] = &inputBuffer[start]; /* set up pointer */
ct++;
inputBuffer[i] = \'\\0\'; /* add a null char; make a C string */
start = -1;
break;
case \'\\0\': /* should be the final char examined */
if (start != -1)
args[ct] = &inputBuffer[start];
ct++;
inputBuffer[i] = \'\\0\';
args[ct] = NULL; /* no more arguments to this command */
break;
default : /* some other character */
if (start == -1)
start = i;
printf("分解之后的字符串为:\\n");
for(i=0;i<ct;i++)
printf("%s \\n",args[i]);
参考技术A 直接去判断每个字符是否是“0”~“9”,包含这些就直接提示错误信息。 当然如果包含“,、。!”等符号是不是要检测就看你们的要求了。追问
怎么判断每个字符?问题就是怎么分割,不是只打一个数字,而是例如asdfsad1adfa这种,把1检测出来 = =
追答指针。 str++ 的方式 一个个的读出来判断
追问求详细?本人初学者见谅
追答char str[] = "adf3asd"; //模拟一下你的输入数据。
int ret = 1;
char* p = str;
while (*p)
if (*p>='0'&&(*p)<='9')
ret = 0;
break;
p++;
if (ret == 0)
printf("Failed!");
else
printf("Success!");
大神给个赞!可是我要找语言代替这个adf3asd,比如先char name 再scanf %s 来指代输入的字符,要怎么写呢?还有这种语言着实没学过,大神帮写个能懂的comment好吗?十分感谢
追答char* p = NULL;
bool ret = true;
char name[256]=0;
printf("please input your name:\n");
scanf("%s",name);
p = name;
while (*p)
if (*p>'0'&& *p<'9')
ret = false;
break;
if (ret)
printf("Success!");
else
printf("Failed!");
C 语言 字符串命令 strstr()的用法 实现将原字符串以分割串分割输出
strstr() 命令是在原字符串中查找指定的字符串第一次出现的地址,用这个特性可以实现字符的分割,判断是否包涵等功能:
下面的这个例子是实现 字符串以分割串分割输出:
1 #include <stdio.h>
2 #include <string.h>
3
4 int main()
5 {
6 char *str="aaa||a||bbb||c||ee||";
7 char *sp="||";
8
9 char *pos = strstr(str,sp); //先从原始串中寻找分割符所在地址
10 char *lastPos = str; //上一次的首地址 ,第一次当然为原始串的首地址
11 while (pos != NULL)
12 {
13 if((pos - lastPos) > 0) //两个分割串之间是否存在字符
14 {
15 int i = 0;
16 do
17 {
18 printf("%c",*(lastPos + i)); // 从上一地址向当前地址 逐一的输出字符
19 i++;
20 }
21 while((lastPos + i) < pos);
22 printf("\n"); // 在结尾增加换行
23 }
24 lastPos = pos + strlen(sp); //新的字串首 是在上一次找到的地址位置+分割符长
25 pos = strstr(lastPos,sp); //再从新的字串地址开始查找 下一个分割符位置
26 }
27 return 0;
28 /*
29 输出:
30 aaa
31 a
32 bbb
33 c
34 ee
35 */
36 }
以上是关于C语言如何分割字符串的主要内容,如果未能解决你的问题,请参考以下文章