1. 遇到输入多个字符串(不知道字符串个数时),不要用二维数组,用scanf的返回值判断。
while(scanf("%s",str)!=EOF)
{
//执行语句;
}
2. scanf和gets同时输入时,记得使用getchar吃掉scanf的回车
scanf("%d",&a);
getchar();
gets(s);
3. scanf输入字符串时 ,无法读取空格。
4. 如果字符串需要提前终止,记得加"\0"
//1. 删除字符串之间的空格,并且计算空格数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int Delspace(char* str)
{
int i=0, j=0;
while (*(str + i) != '\0')
{
if (*(str + i) != ' ') {
*(str + j) = *(str + i);
j++;
}
i++;
}
*(str + j) = '\0';
return i - j;
}
int main()
{
char str[100] = { 0 };
printf("请输入字符串:");
gets(str);
int ch = Delspace(str);
printf("%s\n", str);
printf("%d\n", ch);
return 0;
}
5. 字符串中相关字符修改时,需要修改的字符函数传参应传指针
//2. 编写程序,输入一个字符串s,接着再输入一个字符ch(测试数据保证ch一定会是小写字母),
//将字符串s 中所有的ch字符都改成其对应的大写字母。输出处理后的字符串。
//例如:输入:abcdaabMcAaB
//a
//输出 : AbcdAAbMcAAB
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void Change(char* str, char* ch)
{
int i = 0;
while (*(str + i) != '\0')
{
if (*(str + i) == *ch)
{
*(str + i) = *ch - 32;
}
i++;
}
}
int main()
{
char str[100] = { 0 };
printf("请输入字符串:");
gets(str);
printf("请输入需要修改的字符:");
char ch;
scanf("%c", &ch);
Change(str,&ch);
puts(str);
return 0;
}
3. 字符串插入
字符串插入: “1234567890”
在第2个位置后面插入”ABC”
最终结果 : “12ABC34567890”
int main()
{
char str[100] = { 0 };
char s[10] = { 0 };
int x;
printf("请输入字符串:");
gets(str);
printf("请输入需要插入的位置:");
scanf("%d", &x);
printf("请输入需要插入的字符串:");
scanf("%s", s);
int len1 = strlen(str);
int len2 = strlen(s);
int i = 0,j=0;
for (i = len2+len1 - 1; i >len2+ x-1; i--)
{
str[i] = str[i-len2];
}
for (i = x; i < x+len2; i++)
{
str[i] = s[j];
j++;
}
str[len1 + len2] = '\0';
puts(str);
return 0;
}
4. 字符串查找
字符串查找: “123456123abc123hbc”
查找字符串”123”的数量。数量是3
int Search(char* str, char* s,int sz_str,int sz)
{
int i = 0,j = 0,count = 0,num = 0;
for (i = 0; i < sz_str; i++)
{
for (j = 0; j < sz; j++)
{
if (*(str + i + j) != *(s + j))
{
break;
}
else {
count++;
}
}
if (count == sz)
{
num++;
i += sz-1;
count = 0;
}
}
return num;
}
int main()
{
char str[100] = { 0 };
char s[10] = { 0 };
printf("请输入字符串:");
gets(str);
printf("请输入需要查找的字符串:");
gets(s);
int sz = strlen(s);
int sz_str = strlen(str);
int ch=Search(str, s,sz_str, sz);
printf("%d\n", ch);
return 0;
}
5.字符串删除: “1234567890”
删除”456” 最终结果 : “1237890”
void Delete(char* str, char* s,int sz_str,int sz_s)
{
int i = 0,j=0,count=0,p=0;
for (i = 0; i < sz_str; i++) {
for (j = 0; j < sz_s; j++)
{
if (*(str + i + j) == *(s + j)) {
count++;
}
else {
break;
}
}
if (count == sz_s) {
p = i;
break;
}
}
for (i = p; i < sz_str-sz_s; i++) {
*(str + i) = *(str + i + sz_s );
}
*(str + sz_str - sz_s ) = '\0';
}
int main()
{
char str[100] = { 0 };
char s[10] = { 0 };
printf("请输入原字符串:");
gets(str);
printf("请输入需要删除的字符串:");
gets(s);
int sz_str = strlen(str);
int sz_s = strlen(s);
Delete(str, s, sz_str, sz_s);
printf("%s\n", str);
return 0;
}
6. 字符串反转
输入:12345abcde
输出:edcba54321
char* change(char* str,int sz)
{
char* p = str+sz-1;
int i = 0,j=0;
for (i = sz-1;i>=0;i--)
{
*(p + j) = *(str + i);
j++;
}
return p;
}
int main()
{
char* str[100] = { 0 };
printf("请输入原字符串:");
gets(str);
int sz = strlen(str);
char* p = change(str, sz);
printf("%s", p);
return 0;
}
6. 字符串变量即为字符数组,但是在末尾会自动加上一个空字符来进行结尾标示。
7. 字符串指针不可以试图用来改变字符串的值
8. %.ps,用于显示字符串的一部分,p为要显示的字符数量。
%ms%ms:输出的字符串占m列,如字符串本身长度大于m,则突破获m的限制,将字符串全部输出。 若串长小于m,则左补空格。
9. 用puts显示字符串,其会自动在最后加上换行符。
使用scanf输入字符串时,scanf("%s",str1);的str1前不用&,str1为数组名。