【2016-c-三-3】找出指定字符在字串中首次出现的位置

找出指定字符在字串中首次出现的位置


// 在编写这个程序的时候遇到的问题:

/**
scanf("%s",str); 输入完成时会有一个\n被压栈存储,导致第二个scanf失效

解决方案:
1. scanf("%s]",str);
fflush(stdin);//清空缓冲区

2. scanf("%s",str);//用getchar将\n取出
char test = getchar();
printf("%d",test);

3.gets(str);//

串中有空格等:

1.字符串里面可能有空格、制表符等空白字符,如果直接用%s是不可以的
2.gets()可以实现,但是gets不安全,控制难度大。
3.scanf("%[^\n]%*c",str);
//%*c的作用是读入\n,否则后面读入的将一直是\n 、%*c表示读入不存储注意c不可以换成其他字符
//^表示"非",即读入其后面的字符就结束读入
**/

// 参考链接:
// http://blog.csdn.net/hao5743/article/details/6939661
// http://blog.sina.com.cn/s/blog_60cbc1700100ohil.html
// http://blog.csdn.net/why850901938/article/details/51298656

// 本题答案:

#include
#define MaxSize 100

int search_pos(char *str,char c)
{
int i = 1;//用于标记位置
while(*str)
{
if(*str==c)
return i;
str++;//指针下移
i++;//标记加一

}
return 0;
}

int main()
{
char str[MaxSize],x;
int pos;
printf("请输入字符串\n");
gets(str);//考试应该可以写
//scanf("%[^\n]%*c",str);//%*c表示输入但不存储 标准写法
printf("请输入要查找的字符\n");
scanf("%c",&x);
pos = search_pos(str,x);
if(pos == 0)
printf("此字符不存在于字符串中\n");
else
printf("查找成功此字符在字符串的第%d个位置\n",pos);
}


另一种思路:先输入字符再输入字符串,可以完美解决

#include

int main()
{
char str[100];
printf("输入字符\n");
char c = getchar();
//char x = getchar();
//printf("%d",x);
printf("输入字符串\n");
scanf("%s",str);
printf("%d",str[0]);
}

补充:

#include

int main()
{
// 同时使用scanf输入两个字符串可以
/**
char str[100], a[100];
printf("输入字符串\n");
scanf("%s",str);
printf("输入字符串\n");
scanf("%s",a);
**/

//先输入字符(getchar、scanf均可)后输入字符串可以
/**
char str[100], a;
printf("输入字符\n");
scanf("%c",&a);
printf("输入字符串\n");
scanf("%s",str);
**/

//先输入字符串(scanf输入),后输入字符不可以但是使用gets()可以
char str[100], a;
printf("输入字符串\n");
//scanf("%s",str);
gets(str);
printf("输入字符\n");
scanf("%c",&a);

//总结:不能使用scanf先输入字符串再输入字符,其他情况均可

}