C语言中检测字符串中回车并将回车以后的字符赋值给变量

如图所示,我想要读取第二行的abc123,在串口中该怎么实现,我知道的好像用strchr可以解决,求具体方法,谢大神!

可以用一个循环一个一个的判断字符串中是否有回车,然后将它下一个字符赋给变量,最后退出循环。

下面是具体代码:

#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测试其他情况,也可以写一段代码自行输入字符串。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-07-11

如果字符串里只有一个回车符的话,那方法就是循环字符串中的每一个字符,找到 '\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;
    }
}

 

第2个回答  2016-07-31
#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;
}

第3个回答  2016-06-28
因为网络太差, 所以回答的时候没看到图片,然后自己看着写了,就是这样.

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);
}
第4个回答  2014-06-02
串口是按字符读取的,你就一直读,只要不是回车就抛弃。直到读到第一个回车符,然后从下一个开始存储就行了本回答被网友采纳
相似回答