user-0 提问:  查找指定字符

回复:
user: user-1
content: 引用 27 楼 maggielve 的回复:[quote=引用 26 楼 xiaoyin35的回复:][quote=引用 25 楼 maggielve 的回复:][quote=引用 22 楼 xiaoyin35的回复:][quote=引用 21 楼 xiaoyin35 的回复:]听起来很难啊~我个蒻菊都看出来了？是不是有啥限制？比如必须用scanf,printf,gets,puts这种？ 没听说过iostream吗？ 简单!上代码！  #include <iostream> using namespace std; int main() {     char c, a[110];     bool flag = 1; //找没找到？没找到     cin >> c;//这才是cin的正道     getline(cin, a); //怕空格？iostream用getline！     for (int i = 0; i < strlen(a); i++)     {         if (a[i] == c)         {             flag = 0; //找到啦             cout << "index = " << i << endl; //现在就输出不好？         }     }     if (flag) //都扫完了还没找到？     {          cout << "Not Found" << endl; //对不住了小兄弟     }     return 0; }   我要来狠的就直接上string多痛快(STL string)   #include <iostream> using namespace std; int main() {     char c;     string a;     bool flag = 1; //找没找到？没找到     cin >> c;//这才是cin的正道     getline(cin, a); //怕空格？iostream用getline！     for (int i = 0; i < a.length(); i++)     {         if (a[i] == c)         {             flag = 0; //找到啦             cout << "index = " << i << endl; //现在就输出不好？         }     }     if (flag) //都扫完了还没找到？     {          cout << "Not Found" << endl; //对不住了小兄弟     }     return 0; }  这爽！作者，你看，哪个测试点没过来叫我！[/quote] 你用c++写的吗？我学的是c,而且没学位运算符[/quote]  string才是C++ STL里的，我是C++er，略会一点C。[/quote] 我是C  er,c++有的地方看不懂[/quote] 多学学，C++对学C、Java都有好处

user: user-0
content: 引用 22 楼 xiaoyin35的回复:[quote=引用 21 楼 xiaoyin35 的回复:]听起来很难啊~我个蒻菊都看出来了？是不是有啥限制？比如必须用scanf,printf,gets,puts这种？ 没听说过iostream吗？ 简单!上代码！  #include <iostream> using namespace std; int main() {     char c, a[110];     bool flag = 1; //找没找到？没找到     cin >> c;//这才是cin的正道     getline(cin, a); //怕空格？iostream用getline！     for (int i = 0; i < strlen(a); i++)     {         if (a[i] == c)         {             flag = 0; //找到啦             cout << "index = " << i << endl; //现在就输出不好？         }     }     if (flag) //都扫完了还没找到？     {          cout << "Not Found" << endl; //对不住了小兄弟     }     return 0; }   我要来狠的就直接上string多痛快(STL string)   #include <iostream> using namespace std; int main() {     char c;     string a;     bool flag = 1; //找没找到？没找到     cin >> c;//这才是cin的正道     getline(cin, a); //怕空格？iostream用getline！     for (int i = 0; i < a.length(); i++)     {         if (a[i] == c)         {             flag = 0; //找到啦             cout << "index = " << i << endl; //现在就输出不好？         }     }     if (flag) //都扫完了还没找到？     {          cout << "Not Found" << endl; //对不住了小兄弟     }     return 0; }  这爽！作者，你看，哪个测试点没过来叫我！[/quote] 你用c++写的吗？我学的是c,而且没学位运算符

user: user-0
content: 引用 26 楼 xiaoyin35的回复:[quote=引用 25 楼 maggielve 的回复:][quote=引用 22 楼 xiaoyin35的回复:][quote=引用 21 楼 xiaoyin35 的回复:]听起来很难啊~我个蒻菊都看出来了？是不是有啥限制？比如必须用scanf,printf,gets,puts这种？ 没听说过iostream吗？ 简单!上代码！  #include <iostream> using namespace std; int main() {     char c, a[110];     bool flag = 1; //找没找到？没找到     cin >> c;//这才是cin的正道     getline(cin, a); //怕空格？iostream用getline！     for (int i = 0; i < strlen(a); i++)     {         if (a[i] == c)         {             flag = 0; //找到啦             cout << "index = " << i << endl; //现在就输出不好？         }     }     if (flag) //都扫完了还没找到？     {          cout << "Not Found" << endl; //对不住了小兄弟     }     return 0; }   我要来狠的就直接上string多痛快(STL string)   #include <iostream> using namespace std; int main() {     char c;     string a;     bool flag = 1; //找没找到？没找到     cin >> c;//这才是cin的正道     getline(cin, a); //怕空格？iostream用getline！     for (int i = 0; i < a.length(); i++)     {         if (a[i] == c)         {             flag = 0; //找到啦             cout << "index = " << i << endl; //现在就输出不好？         }     }     if (flag) //都扫完了还没找到？     {          cout << "Not Found" << endl; //对不住了小兄弟     }     return 0; }  这爽！作者，你看，哪个测试点没过来叫我！[/quote] 你用c++写的吗？我学的是c,而且没学位运算符[/quote]  string才是C++ STL里的，我是C++er，略会一点C。[/quote] 我是C  er,c++有的地方看不懂

user: user-1
content: 引用 25 楼 maggielve 的回复:[quote=引用 22 楼 xiaoyin35的回复:][quote=引用 21 楼 xiaoyin35 的回复:]听起来很难啊~我个蒻菊都看出来了？是不是有啥限制？比如必须用scanf,printf,gets,puts这种？ 没听说过iostream吗？ 简单!上代码！  #include <iostream> using namespace std; int main() {     char c, a[110];     bool flag = 1; //找没找到？没找到     cin >> c;//这才是cin的正道     getline(cin, a); //怕空格？iostream用getline！     for (int i = 0; i < strlen(a); i++)     {         if (a[i] == c)         {             flag = 0; //找到啦             cout << "index = " << i << endl; //现在就输出不好？         }     }     if (flag) //都扫完了还没找到？     {          cout << "Not Found" << endl; //对不住了小兄弟     }     return 0; }   我要来狠的就直接上string多痛快(STL string)   #include <iostream> using namespace std; int main() {     char c;     string a;     bool flag = 1; //找没找到？没找到     cin >> c;//这才是cin的正道     getline(cin, a); //怕空格？iostream用getline！     for (int i = 0; i < a.length(); i++)     {         if (a[i] == c)         {             flag = 0; //找到啦             cout << "index = " << i << endl; //现在就输出不好？         }     }     if (flag) //都扫完了还没找到？     {          cout << "Not Found" << endl; //对不住了小兄弟     }     return 0; }  这爽！作者，你看，哪个测试点没过来叫我！[/quote] 你用c++写的吗？我学的是c,而且没学位运算符[/quote]  string才是C++ STL里的，我是C++er，略会一点C。

user: user-1
content: 引用 23 楼 maggielve 的回复:[quote=引用 21 楼 xiaoyin35的回复:]听起来很难啊~我个蒻菊都看出来了？是不是有啥限制？比如必须用scanf,printf,gets,puts这种？ 没听说过iostream吗？ 刚学c语言没多久，抱歉哈，没听过[/quote]  去网上搜搜

user: user-0
content: 引用 21 楼 xiaoyin35的回复:听起来很难啊~我个蒻菊都看出来了？是不是有啥限制？比如必须用scanf,printf,gets,puts这种？ 没听说过iostream吗？ 刚学c语言没多久，抱歉哈，没听过

user: user-1
content: 引用 21 楼 xiaoyin35 的回复:听起来很难啊~我个蒻菊都看出来了？是不是有啥限制？比如必须用scanf,printf,gets,puts这种？ 没听说过iostream吗？ 简单!上代码！  #include <iostream> using namespace std; int main() {     char c, a[110];     bool flag = 1; //找没找到？没找到     cin >> c;//这才是cin的正道     getline(cin, a); //怕空格？iostream用getline！     for (int i = 0; i < strlen(a); i++)     {         if (a[i] == c)         {             flag = 0; //找到啦             cout << "index = " << i << endl; //现在就输出不好？         }     }     if (flag) //都扫完了还没找到？     {          cout << "Not Found" << endl; //对不住了小兄弟     }     return 0; }   我要来狠的就直接上string多痛快(STL string)   #include <iostream> using namespace std; int main() {     char c;     string a;     bool flag = 1; //找没找到？没找到     cin >> c;//这才是cin的正道     getline(cin, a); //怕空格？iostream用getline！     for (int i = 0; i < a.length(); i++)     {         if (a[i] == c)         {             flag = 0; //找到啦             cout << "index = " << i << endl; //现在就输出不好？         }     }     if (flag) //都扫完了还没找到？     {          cout << "Not Found" << endl; //对不住了小兄弟     }     return 0; }  这爽！作者，你看，哪个测试点没过来叫我！

user: user-1
content: 听起来很难啊~我个蒻菊都看出来了？是不是有啥限制？比如必须用scanf,printf,gets,puts这种？ 没听说过iostream吗？

user: user-2
content: 等等！让我多看看

user: user-0
content: 引用 19 楼 尚乐大哥的回复:对于这个问题，在公众号上面做了详细讲解，可以参考一下，文章点这里 多谢，这又是哪位大哥专门做了篇文章？多谢了

user: user-3
content: 对于这个问题，在公众号上面做了详细讲解，可以参考一下，文章点这里

user: user-4
content: To read strings not delimited by space characters, a set of characters in brackets ([ ]) can be substituted for the s (string) type character. The corresponding input field is read up to the first character that does not appear in the bracketed character set. If the first character in the set is a caret (^), the effect is reversed: The input field is read up to the first character that does appear in the rest of the character set.  Note that %[a-z] and %[z-a] are interpreted as equivalent to %[abcde...z]. This is a common scanf function extension, but note that the ANSI standard does not require it.  附上文对应的百度自动翻译结果： 要读取不由空格字符分隔的字符串，可以用括号（[]）中的一组字符替换s（字符串）类型的字符。相应的输入字段被读取到括号内字符集中没有出现的第一个字符。如果集合中的第一个字符是插入符号（^），则效果相反：输入字段将被读取到字符集中其他字符中出现的第一个字符。 注意，%[a-z]和%[z-a]被解释为等同于%[abcde…z]。这是一个常见的scanf函数扩展，但请注意，ANSI标准不需要它。

user: user-5
content: 修改如下：#include "stdio.h" #include "string.h"  int main() { 	char s[2],c,a[81]; 	int flag = -1,i; 	scanf("%[^\n]",s);  //scanf("%c\n",&c);     c=s[0];     getchar();          //gets(a);     scanf("%[^\n]",a);  //scanf("%s",a);//scanf("%s",&a);为啥换成%s就错了呢？错了一个测试点 	for( i = 0 ; i<strlen(a) ; i++ )               if(c == a[i])flag = i; 	if(flag == -1) 		printf("Not Found"); 	else 		printf("index = %d",flag);  	return 0; }

user: user-6
content: 然后见空格就停的%s就不适用了。

user: user-0
content: 引用 7 楼 forever74的回复:题目说的非空字符串，可没说字符串内不含空格啊。 然后呢？？？

user: user-5
content: 引用 13 楼 maggielve 的回复:[quote=引用 10 楼 qzjhjxj的回复:]修改如下：#include "stdio.h" #include "string.h"  int main() { 	char s[2],c,a[81]; 	int flag = -1,i; 	scanf("%[^\n]",s);  //scanf("%c\n",&c);     c=s[0];     getchar();          //gets(a);     scanf("%[^\n]",a);  //scanf("%s",a);//scanf("%s",&a);为啥换成%s就错了呢？错了一个测试点 	for( i = 0 ; i<strlen(a) ; i++ )               if(c == a[i])flag = i; 	if(flag == -1) 		printf("Not Found"); 	else 		printf("index = %d",flag);  	return 0; } 高端操作，[^\n]，这个我还没学呢[/quote]  加油

user: user-0
content: 引用 10 楼 qzjhjxj的回复:修改如下：#include "stdio.h" #include "string.h"  int main() { 	char s[2],c,a[81]; 	int flag = -1,i; 	scanf("%[^\n]",s);  //scanf("%c\n",&c);     c=s[0];     getchar();          //gets(a);     scanf("%[^\n]",a);  //scanf("%s",a);//scanf("%s",&a);为啥换成%s就错了呢？错了一个测试点 	for( i = 0 ; i<strlen(a) ; i++ )               if(c == a[i])flag = i; 	if(flag == -1) 		printf("Not Found"); 	else 		printf("index = %d",flag);  	return 0; } 高端操作，[^\n]，这个我还没学呢

user: user-6
content: 另外，题目说要找最大下标，所以建议逆向循环，一旦找到就立刻break，极端情况下貌似能提高效率一点点。

user: user-4
content: #include <stdio.h> int main() {     char s[2],c,a[81];     int flag,i;     scanf("%1[^\n]",s);  //scanf("%c\n",&c);     c=s[0];     rewind(stdin);     scanf("%80[^\n]",a);     flag=-1;     i=0;     while (1) {         if (0==a[i]) break;         if (c==a[i]) flag = i;         i++;     }     if (-1==flag)         printf("Not Found\n");     else         printf("index = %d\n",flag);      return 0; }

user: user-7
content: #include "stdio.h" #include "string.h"   int main() {     char c,a[81];     int flag = -1,i;     scanf("%c\n",&c);      scanf("%[^\n]",a);     for( i = 0 ; i<strlen(a) ; i++ )               if(c == a[i])flag = i;     if(flag == -1)         printf("Not Found");     else         printf("index = %d",flag);       return 0; }