user-0 提问: C/C++中怎样从字符串中查找特定的字符

回复:
user: user-1
content: 引用 2 楼 LINUX2012LINUX 的回复:你可以自己编写一个函数啊，遍历以便就OK了。 #include <stdio.h> char *s="0.1, 9.735e-012, 4.36397e-012, 6.37811e-012, 7.72087e-012, 1.17491e-011, 5.03535e-012"; int strnchr(const char *p,const char c) {     int n;     n=0;     while (1)  {         if (0==*p) break;         if (c==*p) n++;         p++;     }     return n; } int main() {     printf("%d\n",strnchr(s,','));//6     return 0; }

user: user-2
content: 直接FIND函数就行了啊

user: user-3
content: strchr或者自己遍历都可以呀   #include <stdio.h> #include <string.h>  void demo(const char *s) {     int n;     char c;     const char *p;      c = ',';     n = 0;     for (p = s; *p; ++p) {         if (*p == c) {             printf("p=%d\n", (int)(p - s));             ++n;         }     }     printf("n=%d\n", n); }  int main(int argc, char *argv[]) {     char s [] =      "0.1, 9.735e-012, 4.36397e-012, 6.37811e-012, 7.72087e-012, 1.17491e-011, 5.03535e-012"     ;     char *p;     char c;     int n;      c = ',';     n = 0;     for (p = s; p = strchr(p, c); ) {         printf("p=%d\n", (int)(p - s));         ++n;         ++p;     }     printf("n=%d\n", n);       printf("%s\n", "====");      demo(s);      return 0; }

user: user-0
content: 引用 5 楼 wk89665944 的回复:统计个数(方法一)： #include <string> #include <algorithm> using namespace std;  int main() {     string st("0.1, 9.735e-012, 4.36397e-012, 6.37811e-012, 7.72087e-012, 1.17491e-011, 5.03535e-012");     int nCount = count(st.begin(), st.end(), ','); }  统计个数（方法二）并记录所有逗号',' #include <string> #include <algorithm> #include <vector> using namespace std;  int main() {     string st("0.1, 9.735e-012, 4.36397e-012, 6.37811e-012, 7.72087e-012, 1.17491e-011, 5.03535e-012");     vector<string::iterator>  vec_it;      string::iterator it_start = st.begin();     while(it_start != st.end())     {         it_start = find(it_start, st.end(), ',');         if (it_start != st.end())         {             vec_it.push_back(it_start);         }     }      int nCount = vec_it.size(); // 统计个数， 并且此时所有的逗号','的迭代器都被存储在vec_it容器中 } 非常感谢~~

user: user-4
content: 统计个数(方法一)： #include <string> #include <algorithm> using namespace std;  int main() {     string st("0.1, 9.735e-012, 4.36397e-012, 6.37811e-012, 7.72087e-012, 1.17491e-011, 5.03535e-012");     int nCount = count(st.begin(), st.end(), ','); }  统计个数（方法二）并记录所有逗号',' #include <string> #include <algorithm> #include <vector> using namespace std;  int main() {     string st("0.1, 9.735e-012, 4.36397e-012, 6.37811e-012, 7.72087e-012, 1.17491e-011, 5.03535e-012");     vector<string::iterator>  vec_it;      string::iterator it_start = st.begin();     while(it_start != st.end())     {         it_start = find(it_start, st.end(), ',');         if (it_start != st.end())         {             vec_it.push_back(it_start);         }     }      int nCount = vec_it.size(); // 统计个数， 并且此时所有的逗号','的迭代器都被存储在vec_it容器中 }

user: user-0
content: 引用 1 楼 wangzuxi 的回复:strchr strstr strstr和strchr都是只找到第一次出现的位置,怎么全部找到并计数 阿?

user: user-0
content: 引用 2 楼 LINUX2012LINUX 的回复:你可以自己编写一个函数啊，遍历以便就OK了。 怎么写啊,strstr和strchr函数都是只读取一个字符或字符串..

user: user-5
content: 你可以自己编写一个函数啊，遍历以便就OK了。

user: user-6
content: strchr strstr

user: user-7
content: 引用 14 楼 u013163178 的回复:有时候想一想，他妈编程真难，不过像通了的时候有觉得，就那么回事。 /*************************************************************************     > File Name: char_count.cpp     > Author: Jukay     > Mail: hellojukay@gmail.com      > Created Time: 2014年10月29日 星期三 19时49分21秒  ************************************************************************/  #include<iostream> #include<string> using namespace std;  int main() { 	string test ="0.1, 9.735e-012, 4.36397e-012, 6.37811e-012, 7.72087e-012, 1.17491e-011, 5.03535e-012"; 	int num=0; 	for(auto c : test ) 	{ 		if(c == ',') 			num++; 	} 	cout<< num << endl;  	return 0; } 翻过了山就不觉得山高

user: user-8
content: 有时候想一想，他妈编程真难，不过像通了的时候有觉得，就那么回事。 /*************************************************************************     > File Name: char_count.cpp     > Author: Jukay     > Mail: hellojukay@gmail.com      > Created Time: 2014年10月29日 星期三 19时49分21秒  ************************************************************************/  #include<iostream> #include<string> using namespace std;  int main() { 	string test ="0.1, 9.735e-012, 4.36397e-012, 6.37811e-012, 7.72087e-012, 1.17491e-011, 5.03535e-012"; 	int num=0; 	for(auto c : test ) 	{ 		if(c == ',') 			num++; 	} 	cout<< num << endl;  	return 0; }

user: user-9
content: 历遍数组，然后统计个数

user: user-10
content: 感觉还是for循环 挨个比较以下，比较好控制

user: user-0
content: 引用 7 楼 mymtom 的回复:strchr或者自己遍历都可以呀   #include <stdio.h> #include <string.h>  void demo(const char *s) {     int n;     char c;     const char *p;      c = ',';     n = 0;     for (p = s; *p; ++p) {         if (*p == c) {             printf("p=%d\n", (int)(p - s));             ++n;         }     }     printf("n=%d\n", n); }  int main(int argc, char *argv[]) {     char s [] =      "0.1, 9.735e-012, 4.36397e-012, 6.37811e-012, 7.72087e-012, 1.17491e-011, 5.03535e-012"     ;     char *p;     char c;     int n;      c = ',';     n = 0;     for (p = s; p = strchr(p, c); ) {         printf("p=%d\n", (int)(p - s));         ++n;         ++p;     }     printf("n=%d\n", n);       printf("%s\n", "====");      demo(s);      return 0; } 谢谢了~~

user: user-0
content: 引用 9 楼 zhao4zhong1 的回复:[quote=引用 2 楼 LINUX2012LINUX 的回复:] 你可以自己编写一个函数啊，遍历以便就OK了。 #include <stdio.h> char *s="0.1, 9.735e-012, 4.36397e-012, 6.37811e-012, 7.72087e-012, 1.17491e-011, 5.03535e-012"; int strnchr(const char *p,const char c) {     int n;     n=0;     while (1)  {         if (0==*p) break;         if (c==*p) n++;         p++;     }     return n; } int main() {     printf("%d\n",strnchr(s,','));//6     return 0; } [/quote]谢谢了