C/C++语言连续读入一组字符串

C风格字符串应该理解成最后一个元素是‘\0’的特殊字符数组。
若使用C语言连续读入一组(多个)字符串,则面临如下问题:
1 若使用“%s”格式读入,则输入过程遇到空格、table,回车后自动终止输入,无法输入空格。
2若使用“%c”格式读入,如何连续输入多个字符串?即如何实现以回车终止输入?

以“%s”格式输入字符串的实现方法类似这种情况:

//传入字符指针数组,函数完成输入字符串并将指针指向这些字符串
void cinStr(int n, char * str[]) {
	int i = 0,j = 0;
	char tmp[10];
	for (i; i < n; ++i) {
		scanf_s("%s", tmp,10);
		str[i] = new char[10];
		strcpy_s(str[i],strlen(tmp)+1, tmp);
	}
}

以getchar()函数的实现方法类似这种情况

void cinStr(int n, char * str[]) {
	int i = 0,j = 0;
	char tmp[10];
	for (i = 0; i < n; ++i) {
		for (j = 0;; ++j) {
			tmp[j] = getchar();
			if (tmp[j] == '\n') {
				tmp[j] = '\0';
				break;
			}
		}
		str[i] = new char[10];
		strcpy_s(str[i], strlen(tmp) + 1, tmp);
	}
}

C++风格字符串结合容器的实现

//C++风格字符串的实现方式

//函数cinStr完成向容器中写入字符串

void cinStr(vector<string> & m){
	string mStr;
	cin >> mStr;
	m.push_back(mStr);
}
//函数Transfor完成从容器中取出字符串,格式化后输出

void Transform(int num, const vector<string> & str_array) {

	string filename, basename, extname, tmpname;
	const string defaulName("tmp");
	int i = 0;
	for (i = 0; i < num; ++i) {
		filename = str_array[i];
		int point_p = 0;
		point_p = filename.find('.');
		if (point_p == -1) {
			basename = filename;
			tmpname = basename + '.' + defaulName;
		}
		else {
			basename = filename.substr(0, point_p);
			extname = filename.substr(point_p + 1);
			if (extname.empty()) {
				tmpname = filename + defaulName;
			}
			else {
				if (extname == defaulName) {
					tmpname = filename.replace(point_p + 1, extname.size(), "xxx");
				}
				else
				{
					tmpname = filename.replace(point_p + 1, extname.size(), defaulName);
				}

			}
			
		}
		cout << str_array[i] << " -> " << tmpname << endl;
	}
}
int main() {
	const int nuStr = 5;
	int i;
	vector<string> vecStr;
	for (i = 0; i < nuStr; ++i) {
		cinStr(vecStr);
		
	}
	Transform(nuStr, vecStr);

	return 0;
}

猜你喜欢

转载自blog.csdn.net/hb_cqy1/article/details/82895699