user-0 提问: 关于C语言 字符串中指定字符第N次出现时截取字符串问题

回复:
user: user-1
content: 引用 6 楼 yan597478677 的回复:将第三个“，”换做“\0”不就行了? 谁告诉你源字符串是可写的了？

user: user-0
content: 引用 6 楼 yan597478677 的回复:将第三个“，”换做“\0”不就行了?求实际操作

user: user-2
content: 将第三个“，”换做“\0”不就行了?

user: user-1
content: 标准库里没有现成函数。 不能用strtok，因为处理不了连续的逗号。

user: user-0
content: strtok() 用这个函数能解决吗？  引用 1 楼 zhao4zhong1 的回复://字符串 “123,456,789,0123456,123456” //返回 指定字符“，”第三次出现时 前面的字符串 //结果： “123,456,789” #include <stdio.h> #include <stdlib.h> #include <string.h> int main() {     char s[]="123,456,789,0123456,123456";     char t[256];     char *p,*q;     int n,L;      t[0]=0;     n=0;     p=s;     while (1) {         q=strchr(p,',');         if (NULL==q) break;         p=q+1;         n++;         if (3==n) {             L=__min(255,q-s);             strncpy(t,s,L);t[L]=0;             break;         }     }     printf("%s",t);//123,456,789     return 0; }

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复://字符串 “123,456,789,0123456,123456” //返回 指定字符“，”第三次出现时 前面的字符串 //结果： “123,456,789” #include <stdio.h> #include <stdlib.h> #include <string.h> int main() {     char s[]="123,456,789,0123456,123456";     char t[256];     char *p,*q;     int n,L;      t[0]=0;     n=0;     p=s;     while (1) {         q=strchr(p,',');         if (NULL==q) break;         p=q+1;         n++;         if (3==n) {             L=__min(255,q-s);             strncpy(t,s,L);t[L]=0;             break;         }     }     printf("%s",t);//123,456,789     return 0; } 标准库里没有方法可以直接解决这类问题吗？ 就像Oracle里得函数一样。。。

user: user-1
content: 引用 9 楼 wangjinji123 的回复:[quote=引用 8 楼 zhao4zhong1 的回复:] [quote=引用 6 楼 yan597478677 的回复:] 将第三个“，”换做“\0”不就行了? 谁告诉你源字符串是可写的了？[/quote]如果可写 怎么写 啊。。。 疯了 就是不好使啊。。。[/quote] //字符串 “123,456,789,0123456,123456” //返回 指定字符“，”第三次出现时 前面的字符串 //结果： “123,456,789” #include <stdio.h> #include <stdlib.h> #include <string.h> int main() {     char s[]="123,456,789,0123456,123456";     char *p,*q;     int n,L;      n=0;     p=s;     while (1) {         q=strchr(p,',');         if (NULL==q) break;         p=q+1;         n++;         if (3==n) {             q[0]=0;             break;         }     }     if (3==n) printf("%s",s);//123,456,789     else printf("");//表示没找到第3次出现,的地方     return 0; }

user: user-0
content: 引用 8 楼 zhao4zhong1 的回复:[quote=引用 6 楼 yan597478677 的回复:] 将第三个“，”换做“\0”不就行了? 谁告诉你源字符串是可写的了？[/quote]如果可写 怎么写 啊。。。 疯了 就是不好使啊。。。

user: user-3
content: #include<stdio.h> #include<string.h> #include<algorithm>  int main(){ 	char* str = "123,456,789,0123456,123456"; 	char sub[30]; 	int count = 0, index = 0; 	for (index = 0; index < strlen(str); ++index){ 		if (str[index] == ',') 			++count; 		if (count == 3) 			break; 	} 	strncpy(sub, str, index); 	sub[index] = '\0'; 	puts(sub); } //123,456,789

user: user-1
content: //字符串 “123,456,789,0123456,123456” //返回 指定字符“，”第三次出现时 前面的字符串 //结果： “123,456,789” #include <stdio.h> #include <stdlib.h> #include <string.h> int main() {     char s[]="123,456,789,0123456,123456";     char t[256];     char *p,*q;     int n,L;      t[0]=0;     n=0;     p=s;     while (1) {         q=strchr(p,',');         if (NULL==q) break;         p=q+1;         n++;         if (3==n) {             L=__min(255,q-s);             strncpy(t,s,L);t[L]=0;             break;         }     }     printf("%s",t);//123,456,789     return 0; }