C语言中检测字符串中回车并将回车以后的字符赋值给变量
如图所示,我想要读取第二行的abc123,在串口中该怎么实现,我知道的好像用strchr可以解决,求具体方法,谢大神!...
如图所示,我想要读取第二行的abc123,在串口中该怎么实现,我知道的好像用strchr可以解决,求具体方法,谢大神!
展开
12个回答
展开全部
可以用一个循环一个一个的判断字符串中是否有回车,然后将它下一个字符赋给变量,最后退出循环。
下面是具体代码:
#include <stdio.h>
#include <string.h>
#define SIZE 100 //字符串长度
int main(void)
{
char str[SIZE] = "12345\n6789"; //被检测字符串
char c; //储存回车后变量
int i; //循环控制变量
for (i = 0; i < strlen(str); i++)
{
if (str[i] == '\n')
{
c = str[i+1];
printf("该字符串中有回车,回车后一位字符是"); //有回车时输出内容
if (i + 1 == strlen(str)) //回车在字符串结尾时
{
printf("\\0");
}
else //回车在字符串中时
{
printf("%c", c);
}
break;
}
}
if (i == strlen(str)) //无回车时
{
printf("该字符串中无回车");
}
return 0;
}
该段代码运行后输出是:
该字符串中有回车,回车后一位字符是6
运行正常
可以改动str测试其他情况,也可以写一段代码自行输入字符串。
展开全部
如果字符串里只有一个回车符的话,那方法就是循环字符串中的每一个字符,找到 '\n' 或者 '\r' 的话,记下它的索引,然后用 string.h 库的 strcpy 函数即可。
char *str = "aaaaaaaaaaaaaa\nbbbbbbbbbbbbb";
char str2[128]; /* 结果字符串 */
for(int i = 0; str[i] != 0; ++i)
{
if(str[i] == '\n' || str[i] == '\r')
{
strcpy(str2, str + i + 1);
break;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
#include <stdlib.h>
/****************************************************
函数功能:
入口参数:str ->搜索的字符串
出口参数:* ptr_ch,如果字符串有回车且回车后字符串未
结尾则将回车符后的字符保存到* ptr_ch;
返回值:1 ->查找成功;
0 ->字符串中没有回车符
-1 ->字符串回车符是最后一个字符
备注:str必须是字符串数组否则很可能会造成溢出
*****************************************************/
int GetEnterChar(char str[], char * ptr_ch)
{
while(*str)
{
if('\n' == *str)
{//是回车符
str ++;
if(*str)
{//回车后的字符不是结尾符
*ptr_ch = *str;
return 1;
}
else
{//回车符后是字符串结尾符
return -1;
}
}
str ++;
}
}
int main(int argc, char *argv[])
{
char str[] = "Hello world !\nyes";
char ch = 0;
GetEnterChar(str, &ch);
printf("字符串回车后的字符是:%c\n",ch);
system("PAUSE");
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为网络太差, 所以回答的时候没看到图片,然后自己看着写了,就是这样.
char *get_enter(char *p,int n) //输入被检测的字符串地址及字符串长度,
//返回回车以后的字符串的指针
{
int i;
for(i=0;i<n;i++)
{
if(*(p+i)!==13)
break; //检测到回车(ASCALL码13)跳出循环
return p+i; //返回回车以后的字符串的地址
}
main()
{
int m;
char str2[]; // 储存回车以后的字符赋值
char str1[m]=".........."; // 被检测的字符串
m=sizeof(str1);
str2[]=get_enter(str,m);
}
char *get_enter(char *p,int n) //输入被检测的字符串地址及字符串长度,
//返回回车以后的字符串的指针
{
int i;
for(i=0;i<n;i++)
{
if(*(p+i)!==13)
break; //检测到回车(ASCALL码13)跳出循环
return p+i; //返回回车以后的字符串的地址
}
main()
{
int m;
char str2[]; // 储存回车以后的字符赋值
char str1[m]=".........."; // 被检测的字符串
m=sizeof(str1);
str2[]=get_enter(str,m);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
串口是按字符读取的,你就一直读,只要不是回车就抛弃。直到读到第一个回车符,然后从下一个开始存储就行了
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询